home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DS-CD ROM 2 1993 August
/
DS CD-ROM 2.Ausgabe (August 1993).iso
/
programm
/
ds0318a
/
lhafor1.exe
/
HANDBUCH.TXT
< prev
next >
Wrap
Text File
|
1992-11-18
|
509KB
|
7,312 lines
╔══════════════════════════════════════════════════════════════════════╗
║ Bibliothek FORSUB / FORSUBA / FORSUB7 für Microsoft-FORTRAN-77 ║
║ ║
║ Version 8/92 ║
║ ║
╟──────────────────────────────────────────────────────────────────────╢
║ ║
║ Inhaltsverzeichnis ║
╟──────────────────────────────────────────────────────────────────────╢
║ ║
║ Allgemeine Informationen zur Bibliothek . . . . . Seite 1 ║
║ ║
║ Zeilenweise Ein- und Ausgabe am Bildschirm . . . . . Seite 5 ║
║ ║
║ Blockweise Ein- und Ausgabe am Bildschirm . . . . . Seite 30 ║
║ ║
║ Menüsteuerung . . . . . . . . . . . . . . . Seite 35 ║
║ ║
║ Bildschirmmasken . . . . . . . . . . . . . . Seite 45 ║
║ ║
║ Fenstertechnik . . . . . . . . . . . . . . Seite 52 ║
║ ║
║ Schriftengeneratoren . . . . . . . . . . . . Seite 89 ║
║ ║
║ Zeit- und Akustiksteuerung . . . . . . . . . . Seite 94 ║
║ ║
║ Transformationen . . . . . . . . . . . . . . Seite 98 ║
║ ║
║ Zufallszahlen und Sortierungen . . . . . . . . . Seite 106 ║
║ ║
║ Stringmanipulationen . . . . . . . . . . . . Seite 112 ║
║ ║
║ Laufwerks-, Verzeichnis- und Dateimanipulationen . . . Seite 129 ║
║ ║
║ Zugriff auf Speicherinhalte . . . . . . . . . . Seite 144 ║
║ ║
║ Virituelle Speicherverwaltung . . . . . . . . . Seite 150 ║
║ ║
║ Childprozess und Interruptaufruf . . . . . . . . Seite 158 ║
║ ║
║ Verschiedene Routinen . . . . . . . . . . . . Seite 163 ║
║ ║
║ ASCII-Code-Tabelle . . . . . . . . . . . . . Seite 181 ║
║ ║
║ Farbcode-Tabelle . . . . . . . . . . . . . . Seite 182 ║
║ ║
║ ║
║ ║
║ ║
║ ║
║ ║
║ ║
║ ║
║ ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 1
BIBLIOTHEK FORSUB.LIB FÜR MICROSOFT-FORTRAN-77
Copyright
(c) Copyright 1991/92 Fa. C. Killet Software, Postfach 400258, 4152
Kempen. Die hier beschriebene Software ist urheberrechtlich geschützt.
Sie darf ohne Zustimmung der Fa. C. Killet nicht verändert, verkauft
oder weitergegeben werden. Als Sharewareversion gekennzeichnete
Produkte dürfen ausdrücklich uneingeschränkt kostenlos weitergegeben
werden. Der in dieser Dokumentation verwendete Begriff MICROSOFT ist ein
eingetragenes Warenzeichen der Microsoft Cooperation.
Haftung und Garantie
Die Fa. C. Killet übernimmt die Garantie für die Lesbarkeit des direkt
bei ihr erworbenen Datenträgers und für die Verwendbarkeit der bei ihr
erworbenen Software in Höhe des Kaufpreises. Darüber hinaus gibt die
Fa. C. Killet keine Garantien irgendeiner Art. Unter keinen Umständen
ist die Fa. C. Killet haftbar für jedwede Folgeschäden, Verluste und
entgangene Gewinne, die durch den Gebrauch oder die Nichtverwendbarkeit
der Software entstehen. Die Kopier- und Versandgebühr für Shareware-
produkte gilt dabei nicht als Kaufpreis.
Unterschied der Sharewareversion zur Originalbibliothek
Bitte beachten Sie diesen Abschnitt nur, wenn Sie die Sharewareversion
erworben haben. Die Sharewarebibliothek entspricht den Bestimmungen der
"Association of Shareware Professionals" (ASP). In Übereinstimmung mit
den ASP-Richtlinien ist sie in keiner Weise eingeschränkt. Nach dem
Aufruf eines mit der Sharewarebibliothek gelinkten Programms wird in
bestimmten Zeitabständen ein Hinweisbildschirm ausgegeben. Der
Hinweisbildschirm hat keinen Einfluß auf das Programm. Nach dem
Ausblenden des Hinweises wird der ursprüngliche Bildschirminhalt
wiederhergestellt. In der Sharewareversion steht die Bibliothek in der
Emulator- und der 8087-Version des "Large"-Memory-Model zur Verfügung.
In der Originalversion kann zusätzlich die AltMath-Version erworben
werden. Die Ausführungsgeschwindigkeit damit gelinkter Programme ist
etwas geringer, der von den exekutiven Programmen benötigte
Speicherplatz ist etwas höher als bei mit der Originalversion gelinkten
Programmen. Sollte die Bibliothek Ihren Anforderungen entsprechen, so
benutzen Sie das Registrierungsformular aus der Datei "BESTELL.TXT" für
die Registrierung. Aus dem Hinweisbildschirm des Programms "ZEISATZ"
kann das Formular gedruckt werden. Registrierte Anwender erhalten ein
gedrucktes Benutzerhandbuch und die Originalsoftware mit einer
absetzbaren Rechnung. Mit Hilfe der Sharewareversion erstellte
Programme sind nach dem Linken mit der Originalbibliothek voll
gebrauchsfähig. Es müssen keine Änderungen in den Quelltexten
vorgenommen werden!
Seite 2
UPDATE-Service
Registrierte Anwender können gegen eine Gebühr von DM 20.- jederzeit
die neuste Version der Bibliothek bei der Fa. C. Killet bestellen.
UPDATES bleiben zu der bisher benutzten Version voll kompatibel. Die
Bibliothek wird jedoch ständig mit neuen Routinen ergänzt und
verbessert.
Demonstrations-Programm
Viele Subroutinen der Bibliothek werden in einem Demonstrations-Programm
vorgestellt. Der Quelltext des Demonstrations-Programms ist in der
Datei "DEMO.FOR" zu finden. Er enthält die beispielhafte Programmierung
vieler Subroutinen als Hilfe bei der Programmentwicklung. Das
compilierte und mit "FORSUB.LIB" gelinkte Programm steht in der
Datei "DEMO.EXE" zur Verfügung. Beim testweisen Linken des Programms ist
zu beachten, daß die Option /SE:256 verwendet wird. Bitte benutzen Sie
die folgende Syntax:
FL /FPi /AL /c DEMO.FOR
LINK DEMO,DEMO,NUL,LLIBFORE FORSUB,NUL /NOD /SE:256
Einsatz der Bibliothek
Die Bibliothek FORSUB.LIB enthält ca. 180 Subroutinen zum Einsatz mit
dem MICROSOFT-FORTRAN-Compiler ab der Version 4.0. Die Bibliothek ist
in Versionen lieferbar, die zusammen mit den zu MICROSOFT-FORTRAN-77
gehörenden Standardlibraries LLIBFORE.LIB, LLIBFORA.LIB oder
LLIBFOR7.LIB verwendet werden können. Dabei wird das "Large"-Menory-
Model wahlweise in der Emulator, Altmath oder 8087-Version unterstützt.
Alle Subroutinen in FORSUB.LIB sind bezüglich ihres Laufzeitverhaltens
optimiert. Die Subroutinen der Library können mit MICROSOFT-FORTRAN
Objektmodulen und Objektmodulen aus anderen MICROSOFT-Compilern
zusammengelinkt werden. FORSUB.LIB funktioniert auf allen
IBM-compatiblen XT- und AT-Personal-Computern mit dem Betriebssystem
MS-DOS oder PC-DOS. Die Bibliothek ist auch mit anderen,
MICROSOFT-kompatiblen Compilern lauffähig.
Geschwindigkeit und Speicherbedarf
FORSUB.LIB erweitert die Möglichkeiten der Programiersprache FORTRAN-77
erheblich, da als Ergänzung zur Standardbibliothek eine große Anzahl von
nicht-FORTRAN-spezifischen Funktionen zur Verfügung gestellt werden.
Ein Teil der in der Bibliothek enthaltenen Subroutinen sind in ASSEMBLER
programmiert. Das führt zu der hohen Geschwindigkeit und zum geringen
Speicherbedarf der in FORSUB.LIB enthaltenen Subroutinen.
Seite 3
Inhalt der Bibliothek
Neben der zeilenweisen und blockweisen positionierten Ein- und Ausgabe
aller gängigen Datentypen am Bildschirm werden ein- und mehrfache
Auswahlen durch Menütechnik und die Dateneingabe per Bildschirmmaske zur
Verfügung gestellt. Besondere Aufmerksamkeit verdienen die zahlreichen
Subroutinen zur hirachischen Fenstertechnik mit deren Hilfe Menüs, Texte
und Datenfelder erzeugt, verwaltet und im Arbeitspeicher abgelegt werden
können. Die Benutzung vorgegebener oder selbsterzeugter Schrifttypen
unterschiedlicher Größe ist genauso möglich, wie die Verwendung
übergroßer Blockschriften. Weitere Komponenten der Bibliothek sind
Routinen zur Zeitsteuerung und Akustik, das Erzeugen von Zufallszahlen
und Sortierungen von Datenfeldern. Daneben können Format- und
Attributtransformationen, zahlreiche Routinen für verschiedene
Stringmanipulationen und viele Datei-, Verzeichnis- und Laufwerks-
funktionen verwendet werden. Wichtig ist auch die Möglichkeit, direkt
auf Maschinenadressen zu schreiben oder Daten aus Maschinenadressen
auszulesen. Bereiche des Arbeitspeichers können zum Zweck der
Datenablage allokiert und verwaltet werden. Der Aufruf eines
Subprogramms oder einer DOS-Aplikation ist mit Subroutinen aus der
Bibliothek FORSUB.LIB genauso möglich, wie ein Interruptaufruf aus einem
FORTRAN-Programm. Außerdem wird die Steuerung einer MICROSOFT-
kompatiblen Maus von der Bibliothek unterstützt. Neben den hier
beschriebenen Anwendungsbereichen gibt es noch viele Subroutinen für
verschiedene Anwendungen.
Farbige Bildschirm- Ein- und Ausgabe
Wenn eine Farbgraphikkarte und ein Farbbildschirm vorhanden sind, können
Bildschirm- Ein- und Ausgaben durch die Verwendung von Farbattributen in
beliebigen Vorder- und Hintergrundfarben dargestellt werden. Wenn durch
die Konfiguration des verwendeten Bildschirms und der Graphikarte nur
eine monochrome Darstellung möglich ist, wird dieser Umstand von den
Subroutinen aus FORSUB.LIB erkannt, und die Farbattribute werden
automatisch der monochromen Ausgabe angepasst. Eine Liste aller
möglichen Farbattribute befindet sich im Anhang des Benutzerhandbuchs.
Aufbau des Handbuchs
Die Subroutinen der FORTRAN-Bibliothek FORSUB.LIB sind im Handbuch nach
Sachgebietsgruppen geordnet zusammengestellt. Zu jeder
Sachgebietsgruppe gibt es eine Zusammenstellung der zu ihr gehörenden
Subroutinen und eine globale Erläuterung zum Sachgebiet. Zu jeder
Subroutine korrespondiert mit einem separaten Kennblatt.
Kennblatt zur Subroutine
Zu jeder Subroutine gehört ein separates Kennblatt. Im ersten Teil des
Kennblatts wird der Zweck der Subroutine und die beim Aufruf erfolgenden
Aktionen beschrieben. Alle Besonderheiten der Subroutine werden hier
erläutert. Darauf folgt eine Auflistung der benötigten Parameter mit
der genauen Typbeschreibung, einer Kurzerläuterung und eventuellen
Seite 4
Beschränkungen in der Reihenfolge der Übergabe. Beschränkungen und
Größenangaben sind dabei in [ ] angegeben. In der Subroutine verwendete
externe Routinen aus der Bibliothek FORSUB.LIB sind in der Rubrik
"Subroutinen" gesondert aufgeführt. Zum Schluß wird die Verwendung der
jeweiligen Subroutine anhand eines oder mehrerer Programmierbeispiele
veranschaulicht. Dabei handelt es sich nicht um vollständige Programme,
sondern um Programmausschnitte. Die Verwendung vieler Subroutinen kann
zusätzlich im Quelltext des zur Bibliothek gehörenden Demonstrations-
programms "DEMO.FOR" nachgelesen werden.
Parameterübergabe
In der Bibliothek FORSUB.LIB sind ausschließlich SUBROUTINES zu finden.
Auf die Auslegung einzelner Routinen als FUNCTIONS wurde absichtlich
verzichtet, da selten nur ein einzelnes Parameter an das rufende
Programm zurückgegeben wird. Alle Parameter des Typs INTEGER, REAL und
LOGICAL werden im 4-Byte-Format übergeben. Das entspricht den in
MICROSOFT-FORTRAN üblichen Formaten, die ohne explizite Größenangabe
benutzt werden können. CHARACTERS benutzen das übliche 1-Byte-Format,
Character-Strings erhalten die mit "*(n)" definierte Größe.
Utillities
Zur FORTRAN-Bibliothek FORSUB.LIB gehören drei Programme. Mit dem
Programm DIRECT können Dateien, die mit einem Texteditor erzeugt worden
sind, direct organisiert werden. Direct organisierte Dateien werden von
den Subroutinen MENTXT, MASTXT und TXTFEN benötigt. Das Programm
benötigt beim Aufruf zwei Parameter. Im ersten Parameter wird der Name
der zu organisierenden Datei übergeben, im zweiten Parameter steht die
benötigte Recordlänge in Byte.
Aufruf: DIRECT [Laufwerk:\Pfad\]Datei Recordlänge
Mit Hilfe des Programms ZEISATZ kann ein User-Zeichensatz erzeugt oder
korrigiert werden. User-Zeichensätze können mit der Subroutine SCRIPT
aktiviert werden. Beim Aufruf des Programms ist als Parameter der Name
einer vorhandenen oder neu anzulegenden Datei erforderlich. Alle
anderen erforderlichen Eingaben werden im Dialog erfragt.
Aufruf: ZEISATZ Datei
Das Programm KEY schreibt die Tastaturcodes und -flags beim Betätigen
der Tastatur in dezimaler Schreibweise auf den Bildschirm.
Aufruf: KEY
Beenden : Ctrl C
Tabellen
Im Anhang des Benutzerhandbuchs sind eine ASCII-Codetabelle und eine
Farbcodetabelle enthalten.
Seite 5
Compilieren und Linken mit FORSUB.LIB
Um Routinen aus der Bibliothek FORSUB.LIB in Programme einzubinden,
können die folgenden FL-Kommandos (siehe User's Guide des
MICROSOFT-FORTRAN-Compilers) eingegeben werden:
Compilieren: FL /c /AL /FPi myfile.for
Linken: LINK myfile,myfile,NUL,LLIBFORE FORSUB,NUL /NOD
FORSUB.LIB ist die Tools-Library für das Large-Model in der
Emulatorversion.
LLIBFORE.LIB ist die zu zum FORTRAN-Compiler gehörende
Standardbibliothek für das Large-Model in der Emulatorversion.
oder:
Compilieren: FL /c /AL /FPa myfile.for
Linken: LINK myfile,myfile,NUL,LLIBFORA FORSUBA,NUL /NOD
FORSUBA.LIB ist die Tools-Library für das Large-Model in der
Altmath-Version.
LLIBFORA.LIB ist die zu zum FORTRAN-Compiler gehörende
Standardbibliothek für das Large-Model in der Altmath-Version.
oder:
Compilieren: FL /c /AL /FPi87 myfile.for
Linken: LINK myfile,myfile,NUL,LLIBFOR7 FORSUB7,NUL /NOD
FORSUB7.LIB ist die Tools-Library für das Large-Model in der
8087-Version.
LLIBFOR7.LIB ist die zu zum FORTRAN-Compiler gehörende
Standardbibliothek für das Large-Model in der 0887-Version.
Seite 6
Zeilenweise Ein- und Ausgabe am Bildschirm
Unter zeilenweiser Ein- und Ausgabe am Bildschirm wird die Eingabe
einzelner oder mehrerer numerischer oder alphanumerischer Zeichen von
der Tastatur aus mit dem entsprechenden Echo am Bildschirm, sowie die
Ausgabe einzelner oder mehrerer numerischer oder alphanumerischer
Zeichen zum Bildschirm verstanden. Selbstverständlich ist die
positionierte Darstellung am Bildschirm durch die Angabe der
Ausgabezeile und -spalte möglich. Die Farbe des Hinter- und
Vordergrunds der Bildschirmausgabe kann mit Hilfe eines Farbattributs
ausgewählt werden. Eine Liste mit allen möglichen Farbattributen
befindet sich im Anhang des Benutzerhandbuchs. Das Beenden von
Leseroutinen mit Hilfe frei zu wählender Abschlußtasten ist ebenso
möglich, wie das Mitführen der relativen Cursorposition. Dadurch können
einfache Editoren und Bildschirmmasken programmiert werden.
Subroutinen zur zeilenweisen Ein- und Ausgabe am Bildschirm
AREAD a) String positioniert einlesen
b) String positioniert korrigieren; Zeichen werden überschrieben
oder übernommen.
c) String positioniert korrigieren; Vorgabe wird beim Schreiben
des ersten Zeichens gelöscht, sonst übernommen.
AREADP a) String positioniert einlesen, Cursorposition bestimmen
b) String positioniert korrigieren; Zeichen werden überschrieben
oder übernommen; Cursorposition bestimmen.
c) String positioniert korrigieren; Vorgabe wird beim Schreiben
des ersten Zeichens gelöscht, sonst übernommen; Cursor-
position bestimmen.
AREADZ a) String gefiltert positioniert einlesen
b) String gefiltert positioniert korrigieren; Zeichen werden
überschrieben oder übernommen.
c) String gefiltert positioniert korrigieren; Vorgabe wird beim
Schreiben des ersten Zeichens gelöscht, sonst übernommen.
AREADM a) String zentriert positioniert einlesen
b) String zentriert positioniert korrigieren; Zeichen werden
überschrieben oder übernommen.
c) String zentriert positioniert korrigieren; Vorgabe wird beim
Schreiben des ersten Zeichens gelöscht, sonst übernommen.
AWRI a) String positioniert ausgeben
AWRIM a) String zentriert positioniert ausgeben
IREAD a) Integerwert positioniert einlesen
b) Integerwert positioniert korrigieren; Ziffern werden
überschrieben oder übernommen.
c) Integerwert positioniert korrigieren; Vorgabe wird beim
Schreiben der ersten Ziffer gelöscht, sonst übernommen.
IWRI a) Integerwert positioniert mit führenden Nullen ausgeben
IWRIB a) Integerwert positioniert mit führenden Blanks ausgeben
RREAD a) Realwert positioniert einlesen
b) Real positioniert korrigieren; Ziffern werden überschrieben
oder übernommen.
c) Real positioniert korrigieren; Vorgabe wird beim Schreiben
der ersten Ziffer gelöscht, sonst übernommen.
RWRI a) Realwert positioniert mit führenden Nullen ausgeben
Seite 7
RWRIB a) Realwert positioniert mit führenden Blanks ausgeben
DREAD a) Datumsformat positioniert einlesen
b) Datumsformat positioniert korrigieren
DWRI a) Datumsformat positioniert ausgeben
FMEL a) Fehlermeldung positioniert ausgeben
TAST a) Zeichen im Wartestatus von der Tastatur einlesen
b) Zeichen nicht wartend aus dem Tastaturpuffer lesen
Seite 8
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine AREAD (TEXT,LAN,ZEI,SP,COL,SON,ART) ║
║Die Subroutine ermöglicht das Lesen oder die Korrektur eines ║
║Textstrings von der Tastatur aus. Die Tasten des Cursorblocks können ║
║dabei mitbenutzt werden. Der Text wird positioniert in einem farb- ║
║inversen Feld, nach dem Betätigen einer Abschlußtaste in einem ║
║farbnormalen Feld am Bildschirm dargestellt. In der selben Zeile ║
║hinter dem Textfeld positionierte Texte (z. B. aus der Subroutine ║
║FMEL) können bis zum Ende der Zeile gelöscht werden. Außer der ║
║<Return>-Taste können weitere Tasten zum Abschluß der Routine benutzt ║
║werden, die als Bitmuster übergeben werden. Das Bitmuster der zum ║
║Abschluß verwendeten Taste wird an das rufende Programm zurückgegeben.║
║Ob der in der Textvariablen bei der Übergabe vorhandene Text ║
║korrigiert werden soll oder ob ein neuer Text eingelesen werden soll ║
║ergibt sich aus dem Flag, das im letzten Parameter übergeben wird. ║
║In dem Flag wird zurückgegeben, ob der gelesene bzw. korrigierte Text ║
║nur aus Blanks besteht oder nicht. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║CHARACTERSTRING Zu lesenden oder zu korrigierender Text. ║
║ Return: gelesener oder korrigierter Text. ║
║INTEGER Maximale Anzahl der zu bearbeitenden Zeichen ║
║ 1 bis 80). ║
║INTEGER Bildschirmzeile in die der zu bearbeitende Text ║
║ angezeigt werden soll (1 bis 25). ║
║INTEGER Bildschirmspalte in die der zu bearbeitende Text ║
║ angezeigt werden soll (1 bis 80) ║
║INTEGER Farbattribut; Siehe Anhang: "Farbattribute". Wenn ein║
║ Monochrome-Monitor erkannt wird, erfolgt die Ausgabe ║
║ im Schwarz/weiß-Modus. ║
║ Bit 0 - 2: Vordergrundfarbe ║
║ Bit 3 : Intensität der Vordergundfarbe ║
║ Bit 4 - 6: Hintergrundfarbe ║
║ Bit 7 : blinken ║
║INTEGER Bitmuster für Abschlußtasten und Sonderfunktion ║
║ 1: Text hinter Korrekturfeld löschen ║
║ 2: <Cursor rechts>-Taste ║
║ 4: <Cursor links>-Taste ║
║ 8: <Cursor aufwärts>-Taste ║
║ 16: <Cursor abwärts>-Taste ║
║ 32: <Bild aufwärts>-Taste ║
║ 64: <Bild abwärts>-Taste ║
║ 128: <Tabulator rechts>-Taste ║
║ 256: <Tabulator links>-Taste ║
║ 512: <Escape>-Taste ║
║ 1024: <F1>-Taste ║
║ 2048: <F2>-Taste ║
║ 4096: <F3>-Taste ║
║ 8192: <F4>-Taste ║
║ 16384: <F5>-Taste ║
║ 32768: <F6>-Taste ║
║ 65536: <F7>-Taste ║
║ 131072: <F8>-Taste ║
║ 262144: <F9>-Taste ║
║ 524288: <F10>-Taste ║
Seite 9
║ Die Funktionen können durch Addition miteinander ║
║ verknüpft werden. ║
║ Return: Bitmuster der Abschlußtaste ( <Return> = 1 ) ║
║INTEGER Flag, das aussagt, ob neuer Text eingelesen werden ║
║ soll oder ob vorhandener Text korrigiert werden soll.║
║ 0: Neuen Text einlesen ║
║ 1: Vorhandenen Text korrigieren. Vorhandene Zeichen ║
║ werden überschrieben oder werden übernommen. ║
║ 2: Vorhandenen Text erhalten, bis das erste Zeichen ║
║ geschrieben wird. ║
║ Return: Flag, das anzeigt, ob der Text nur aus Blanks║
║ und Nullcharacters besteht oder nicht. ║
║ 0: Text besteht nur aus Blanks oder Nullcharacters ║
║ 1: Text besteht aus Zeichen ║
╟──────────────────────────────────────────────────────────────────────╢
║Subroutinen: ATTCOL,CTBUF ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiele: CALL AREAD (TEXTVA,20,10,20,23,0,0) ║
║ CALL AREAD (TESTVA,20,10,20,23,31,1) ║
║ In der ersten Programmzeile wird das Einlesen, in der║
║ zweiten die Korrektur des Textes im Characterstring ║
║ TESTVA vorgenommen. Die Bildschirmausgabe erfolgt ║
║ jeweils in der 10. Zeile und ab der 20. Bildschirm- ║
║ spalte in hellgrauer Farbe auf blauem Hintergrund. ║
║ Der hinter dem Textfeld positionierte Text bleibt im ║
║ ersten Fall erhalten, im zweiten Beispiel wird er ║
║ gelöscht. Außerdem ist der Abschluß der Textkorrektur║
║ im zweiten Beispiel durch alle Cursortasten möglich. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 10
╔=═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine ║
║AREADZ (TEXT,LAN,ZULZ,LANZ,ZEI,SP,COL,SON,ART) ║
║Die Subroutine ermöglicht das Lesen oder die Korrektur eines ║
║Textstrings von der Tastatur aus. Die Tasten des Cursorblocks können ║
║dabei mitbenutzt werden. Der Text wird positioniert in einem farb- ║
║inversen Feld, nach dem Betätigen einer Abschlußtaste in einem ║
║farbnormalen Feld am Bildschirm dargestellt. In der selben Zeile ║
║hinter dem Textfeld positionierte Texte (z. B. aus der Subroutine ║
║FMEL) können bis zum Ende der Zeile gelöscht werden. Außer der ║
║<Return>-Taste können weitere Tasten zum Abschluß der Routine benutzt ║
║werden, die als Bitmuster übergeben werden. Das Bitmuster der zum ║
║Abschluß verwendeten Taste wird an das rufende Programm zurückgegeben.║
║Ob der in der Textvariablen bei der Übergabe vorhandene Text ║
║korrigiert werden soll oder ob ein neuer Text eingelesen werden soll ║
║ergibt sich aus dem Flag, das im letzten Parameter übergeben wird. ║
║In dem Flag wird zurückgegeben, ob der gelesene bzw. korrigierte Text ║
║nur aus Blanks besteht oder nicht. Im zweiten Parameter werden die ║
║zur Korrektur oder zum Lesen zugelassenen Zeichen als String ║
║an die Routine übergeben. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║CHARACTERSTRING Zu lesenden oder zu korrigierender Text. ║
║ Return: gelesener oder korrigierter Text. ║
║INTEGER Maximale Anzahl der zu bearbeitenden Zeichen ║
║ 1 bis 80). ║
║CHARACTERSTRING Zum Lesen oder Korrigieren zugelassene Zeichen. ║
║INTEGER Anzahl der zugelassenen Zeichen. ║
║INTEGER Bildschirmzeile in die der zu bearbeitende Text ║
║ angezeigt werden soll (1 bis 25). ║
║INTEGER Bildschirmspalte in die der zu bearbeitende Text ║
║ angezeigt werden soll (1 bis 80) ║
║INTEGER Farbattribut; Siehe Anhang: "Farbattribute". Wenn ein║
║ Monochrome-Monitor erkannt wird, erfolgt die Ausgabe ║
║ im Schwarz/weiß-Modus. ║
║ Bit 0 - 2: Vordergrundfarbe ║
║ Bit 3 : Intensität der Vordergundfarbe ║
║ Bit 4 - 6: Hintergrundfarbe ║
║ Bit 7 : blinken ║
║INTEGER Bitmuster für Abschlußtasten und Sonderfunktion ║
║ 1: Text hinter Korrekturfeld löschen ║
║ 2: <Cursor rechts>-Taste ║
║ 4: <Cursor links>-Taste ║
║ 8: <Cursor aufwärts>-Taste ║
║ 16: <Cursor abwärts>-Taste ║
║ 32: <Bild aufwärts>-Taste ║
║ 64: <Bild abwärts>-Taste ║
║ 128: <Tabulator rechts>-Taste ║
║ 256: <Tabulator links>-Taste ║
║ 512: <Escape>-Taste ║
║ 1024: <F1>-Taste ║
║ 2048: <F2>-Taste ║
║ 4096: <F3>-Taste ║
║ 8192: <F4>-Taste ║
║ 16384: <F5>-Taste ║
Seite 11
║ 32768: <F6>-Taste ║
║ 65536: <F7>-Taste ║
║ 131072: <F8>-Taste ║
║ 262144: <F9>-Taste ║
║ 524288: <F10>-Taste ║
║ Die Funktionen können durch Addition miteinander ║
║ verknüpft werden. ║
║ Return: Bitmuster der Abschlußtaste ( <Return> = 1 ) ║
║INTEGER Flag, das aussagt, ob neuer Text eingelesen werden ║
║ soll oder ob vorhandener Text korrigiert werden soll.║
║ 0: Neuen Text einlesen ║
║ 1: Vorhandenen Text korrigieren. Vorhandene Zeichen ║
║ werden überschrieben oder werden übernommen. ║
║ 2: Vorhandenen Text erhalten, bis das erste Zeichen ║
║ geschrieben wird. ║
║ Return: Flag, das anzeigt, ob der Text nur aus Blanks║
║ und Nullcharacters besteht oder nicht. ║
║ 0: Text besteht nur aus Blanks oder Nullcharacters ║
║ 1: Text besteht aus Zeichen ║
╟──────────────────────────────────────────────────────────────────────╢
║Subroutinen: ATTCOL,CTBUF ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiele: CALL AREADZ (TEXTVA,20,'1234567890',13,10,20,23,0,0) ║
║ CALL AREADZ (TESTVA,20,'ABC',3,10,20,23,31,1) ║
║ In der ersten Programmzeile wird das Einlesen, in der║
║ zweiten die Korrektur des Textes im Characterstring ║
║ TESTVA vorgenommen. Die Bildschirmausgabe erfolgt ║
║ jeweils in der 10. Zeile und ab der 20. Bildschirm- ║
║ spalte in hellgrauer Farbe auf blauem Hintergrund. ║
║ Der hinter dem Textfeld positionierte Text bleibt im ║
║ ersten Fall erhalten, im zweiten Beispiel wird er ║
║ gelöscht. Außerdem ist der Abschluß der Textkorrektur║
║ im zweiten Beispiel durch alle Cursortasten möglich. ║
║ Im ersten Beispiel sind nur numerische Zeichen ║
║ zugelassen, im zweiten Beispiel nur die Zeichen ABC. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 12
╔==════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine AREADP (TEXT,LAN,ZEI,SP,POS,COL,SON,ART) ║
║Die Subroutine ermöglicht das Lesen oder die Korrektur eines ║
║Textstrings von der Tastatur aus. Die Tasten des Cursorblocks können ║
║dabei mitbenutzt werden. Der Text wird positioniert in einem farb- ║
║inversen Feld, nach dem Betätigen einer Abschlußtaste in einem ║
║farbnormalen Feld am Bildschirm dargestellt. In der selben Zeile ║
║hinter dem Textfeld positionierte Texte (z. B. aus der Subroutine ║
║FMEL) können bis zum Ende der Zeile gelöscht werden. Außer der ║
║<Return>-Taste können weitere Tasten zum Abschluß der Routine benutzt ║
║werden, die als Bitmuster übergeben werden. Das Bitmuster der zum ║
║Abschluß verwendeten Taste wird an das rufende Programm zurückgegeben.║
║Ob der in der Textvariablen bei der Übergabe vorhandene Text ║
║korrigiert werden soll oder ob ein neuer Text eingelesen werden soll ║
║ergibt sich aus dem Flag, das im letzten Parameter übergeben wird. ║
║In dem Flag wird zurückgegeben, ob der gelesene bzw. korrigierte Text ║
║nur aus Blanks besteht oder nicht. Die relative Startposition des ║
║Cursors wird der Subroutine in der Variablen POS mitgeteilt. Nach ║
║dem Abschluß der Subroutine steht darin die aktuelle relative Position║
║des Cursors. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║CHARACTERSTRING Zu lesenden oder zu korrigierender Text. ║
║ Return: gelesener oder korrigierter Text. ║
║INTEGER Maximale Anzahl der zu bearbeitenden Zeichen ║
║ 1 bis 80). ║
║INTEGER Bildschirmzeile in die der zu bearbeitende Text ║
║ angezeigt werden soll (1 bis 25). ║
║INTEGER Bildschirmspalte in die der zu bearbeitende Text ║
║ angezeigt werden soll (1 bis 80) ║
║INTEGER Relative Startposition des Cursors. ║
║ Return: aktuelle relative Position des Cursors. ║
║INTEGER Farbattribut; Siehe Anhang: "Farbattribute". Wenn ein║
║ Monochrome-Monitor erkannt wird, erfolgt die Ausgabe ║
║ im Schwarz/weiß-Modus. ║
║ Bit 0 - 2: Vordergrundfarbe ║
║ Bit 3 : Intensität der Vordergundfarbe ║
║ Bit 4 - 6: Hintergrundfarbe ║
║ Bit 7 : blinken ║
║INTEGER Bitmuster für Abschlußtasten und Sonderfunktion ║
║ 1: Text hinter Korrekturfeld löschen ║
║ 2: <Cursor rechts>-Taste ║
║ 4: <Cursor links>-Taste ║
║ 8: <Cursor aufwärts>-Taste ║
║ 16: <Cursor abwärts>-Taste ║
║ 32: <Bild aufwärts>-Taste ║
║ 64: <Bild abwärts>-Taste ║
║ 128: <Tabulator rechts>-Taste ║
║ 256: <Tabulator links>-Taste ║
║ 512: <Escape>-Taste ║
║ 1024: <F1>-Taste ║
║ 2048: <F2>-Taste ║
║ 4096: <F3>-Taste ║
║ 8192: <F4>-Taste ║
║ 16384: <F5>-Taste ║
Seite 13
║ 32768: <F6>-Taste ║
║ 65536: <F7>-Taste ║
║ 131072: <F8>-Taste ║
║ 262144: <F9>-Taste ║
║ 524288: <F10>-Taste ║
║ Die Funktionen können durch Addition miteinander ║
║ verknüpft werden. ║
║ Return: Bitmuster der Abschlußtaste ( <Return> = 1 ) ║
║INTEGER Flag, das aussagt, ob neuer Text eingelesen werden ║
║ soll oder ob vorhandener Text korrigiert werden soll.║
║ 0: Neuen Text einlesen ║
║ 1: Vorhandenen Text korrigieren. Vorhandene Zeichen ║
║ werden überschrieben oder werden übernommen. ║
║ 2: Vorhandenen Text erhalten, bis das erste Zeichen ║
║ geschrieben wird. ║
║ Return: Flag, das anzeigt, ob der Text nur aus Blanks║
║ und Nullcharacters besteht oder nicht. ║
║ 0: Text besteht nur aus Blanks oder Nullcharacters ║
║ 1: Text besteht aus Zeichen ║
╟──────────────────────────────────────────────────────────────────────╢
║Subroutinen: ATTCOL,CTBUF ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiele: CALL AREADP (TEXTVA,20,10,20,5,23,0,0) ║
║ CALL AREADP (TESTVA,20,10,20,5,23,31,1) ║
║ In der ersten Programmzeile wird das Einlesen, in der║
║ zweiten die Korrektur des Textes im Characterstring ║
║ TESTVA vorgenommen. Die Bildschirmausgabe erfolgt ║
║ jeweils in der 10. Zeile und ab der 20. Bildschirm- ║
║ spalte in hellgrauer Farbe auf blauem Hintergrund. ║
║ Der hinter dem Textfeld positionierte Text bleibt im ║
║ ersten Fall erhalten, im zweiten Beispiel wird er ║
║ gelöscht. Außerdem ist der Abschluß der Textkorrektur║
║ im zweiten Beispiel durch alle Cursortasten möglich. ║
║ In beiden Beispielen steht der Cursor anfangs auf dem║
║ 5. Zeichen relativ zum Anfang des Textfeldes. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 14
╔===═══════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine AREADM (TEXT,LAN,ZEI,COL,SON,ART) ║
║Die Subroutine ermöglicht das Lesen oder die Korrektur eines ║
║Textstrings von der Tastatur aus. Die Tasten des Cursorblocks können ║
║dabei mitbenutzt werden. Der Text wird positioniert in einem farb- ║
║inversen Feld, nach dem Betätigen einer Abschlußtaste in einem ║
║farbnormalen Feld am Bildschirm dargestellt. In der selben Zeile ║
║hinter dem Textfeld positionierte Texte (z. B. aus der Subroutine ║
║FMEL) können bis zum Ende der Zeile gelöscht werden. Außer der ║
║<Return>-Taste können weitere Tasten zum Abschluß der Routine benutzt ║
║werden, die als Bitmuster übergeben werden. Das Bitmuster der zum ║
║Abschluß verwendeten Taste wird an das rufende Programm zurückgegeben.║
║Ob der in der Textvariablen bei der Übergabe vorhandene Text ║
║korrigiert werden soll oder ob ein neuer Text eingelesen werden soll ║
║ergibt sich aus dem Flag, das im letzten Parameter übergeben wird. ║
║In dem Flag wird zurückgegeben, ob der gelesene bzw. korrigierte Text ║
║nur aus Blanks besteht oder nicht. Das Lesefeld wird mittenzentriert ║
║in der Bildschirmzeile dargestellt. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║CHARACTERSTRING Zu lesenden oder zu korrigierender Text. ║
║ Return: gelesener oder korrigierter Text. ║
║INTEGER Maximale Anzahl der zu bearbeitenden Zeichen ║
║ 1 bis 80). ║
║INTEGER Bildschirmzeile in die der zu bearbeitende Text ║
║ angezeigt werden soll (1 bis 25). ║
║INTEGER Farbattribut; Siehe Anhang: "Farbattribute". Wenn ein║
║ Monochrome-Monitor erkannt wird, erfolgt die Ausgabe ║
║ im Schwarz/weiß-Modus. ║
║ Bit 0 - 2: Vordergrundfarbe ║
║ Bit 3 : Intensität der Vordergundfarbe ║
║ Bit 4 - 6: Hintergrundfarbe ║
║ Bit 7 : blinken ║
║INTEGER Bitmuster für Abschlußtasten und Sonderfunktion ║
║ 1: Text hinter Korrekturfeld löschen ║
║ 2: <Cursor rechts>-Taste ║
║ 4: <Cursor links>-Taste ║
║ 8: <Cursor aufwärts>-Taste ║
║ 16: <Cursor abwärts>-Taste ║
║ 32: <Bild aufwärts>-Taste ║
║ 64: <Bild abwärts>-Taste ║
║ 128: <Tabulator rechts>-Taste ║
║ 256: <Tabulator links>-Taste ║
║ 512: <Escape>-Taste ║
║ 1024: <F1>-Taste ║
║ 2048: <F2>-Taste ║
║ 4096: <F3>-Taste ║
║ 8192: <F4>-Taste ║
║ 16384: <F5>-Taste ║
║ 32768: <F6>-Taste ║
║ 65536: <F7>-Taste ║
║ 131072: <F8>-Taste ║
║ 262144: <F9>-Taste ║
║ 524288: <F10>-Taste ║
║ Die Funktionen können durch Addition miteinander ║
Seite 15
║ verknüpft werden. ║
║ Return: Bitmuster der Abschlußtaste ( <Return> = 1 ) ║
║INTEGER Flag, das aussagt, ob neuer Text eingelesen werden ║
║ soll oder ob vorhandener Text korrigiert werden soll.║
║ 0: Neuen Text einlesen ║
║ 1: Vorhandenen Text korrigieren. Vorhandene Zeichen ║
║ werden überschrieben oder werden übernommen. ║
║ 2: Vorhandenen Text erhalten, bis das erste Zeichen ║
║ geschrieben wird. ║
║ Return: Flag, das anzeigt, ob der Text nur aus Blanks║
║ und Nullcharacters besteht oder nicht. ║
║ 0: Text besteht nur aus Blanks oder Nullcharacters ║
║ 1: Text besteht aus Zeichen ║
╟──────────────────────────────────────────────────────────────────────╢
║Subroutinen: ATTCOL,CTBUF ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiele: CALL AREADM (TEXTVA,20,10,23,0,0) ║
║ CALL AREADM (TESTVA,20,10,23,31,1) ║
║ In der ersten Programmzeile wird das Einlesen, in der║
║ zweiten die Korrektur des Textes im Characterstring ║
║ TESTVA vorgenommen. Die Bildschirmausgabe erfolgt ║
║ jeweils in der 10. Zeile mittenzentriert in hell- ║
║ grauer Farbe auf blauem Hintergrund. Der hinter dem ║
║ Textfeld positionierte Text bleibt im ersten Fall ║
║ erhalten, im zweiten Beispiel wird er gelöscht. ║
║ Außerdem ist der Abschluß der Textkorrektur im ║
║ zweiten Beispiel durch alle Cursortasten möglich. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 16
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine AWRI (TEXT,ANZ,ZEI,SP,COL) ║
║Die Subroutine ermöglicht das positionierte Schreiben eines Text- ║
║strings auf den Bildschirm. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║CHARACTERSTRING zu schreibender Text; hinter dem letzten zu ║
║ zu schreibenden Zeichen kann ein Null-Character ║
║ als Terminator angefügt werden. ║
║INTEGER Anzahl der zu schreibenden Zeichen; es werden soviele║
║ Zeichen geschrieben bis entweder die Anzahl erreicht ║
║ ist oder ein Null-Character gefunden wurde oder die ║
║ Bildschirmspalte 80 beschrieben worden ist. ║
║INTEGER Zeile in die geschrieben werden soll. Der Wert darf ║
║ zwischen 1 und 25 liegen. ║
║INTEGER Spalte ab geschrieben werden soll; Der Wert darf ║
║ zwischen 1 und 80 liegen. ║
║INTEGER Farbattribut; Siehe Anhang: "Farbattribute". Wenn ein║
║ Monochrome-Monitor erkannt wird, erfolgt die Ausgabe ║
║ im Schwarz/weiß-Modus. ║
║ Bit 0 - 2: Vordergrundfarbe ║
║ Bit 3 : Intensität der Vordergundfarbe ║
║ Bit 4 - 6: Hintergrundfarbe ║
║ Bit 7 : blinken ║
╟──────────────────────────────────────────────────────────────────────╢
║Subroutinen: ATTCOL ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiele: CALL AWRI ('Testtext'//CHAR(0),80,10,20,23) ║
║ CALL AWRI ('Testtext',8,10,20,23) ║
║ Beide Programmzeilen veranlassen die Ausgabe des ║
║ Wortes Testtext in der 10. Zeile des Bildschirms. ║
║ Die Ausgabe erfolgt ab der 20. Bildschirmspalte in ║
║ hellgrauer Farbe auf blauem Hintergrund. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 17
╔=═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine AWRIM (TEXT,ANZ,ZEI,COL) ║
║Die Subroutine ermöglicht das positionierte mittenzentrierte Schreiben║
║eines Textstrings auf den Bildschirm. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║CHARACTERSTRING zu schreibender Text; hinter dem letzten zu ║
║ zu schreibenden Zeichen kann ein Null-Character ║
║ als Terminator angefügt werden. ║
║INTEGER Anzahl der zu schreibenden Zeichen; es werden soviele║
║ Zeichen geschrieben bis entweder die Anzahl erreicht ║
║ ist oder ein Null-Character gefunden wurde oder die ║
║ Bildschirmspalte 80 beschrieben worden ist. ║
║INTEGER Zeile in die geschrieben werden soll. Der Wert darf ║
║ zwischen 1 und 25 liegen. ║
║INTEGER Farbattribut; Siehe Anhang: "Farbattribute". Wenn ein║
║ Monochrome-Monitor erkannt wird, erfolgt die Ausgabe ║
║ im Schwarz/weiß-Modus. ║
║ Bit 0 - 2: Vordergrundfarbe ║
║ Bit 3 : Intensität der Vordergundfarbe ║
║ Bit 4 - 6: Hintergrundfarbe ║
║ Bit 7 : blinken ║
╟──────────────────────────────────────────────────────────────────────╢
║Subroutinen: ATTCOL ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiele: CALL AWRIM ('Testtext'//CHAR(0),80,10,23) ║
║ CALL AWRIM ('Testtext',8,10,23) ║
║ Beide Programmzeilen veranlassen die Ausgabe des ║
║ Wortes Testtext in der 10. Zeile des Bildschirms. ║
║ Die Ausgabe erfolgt mittenzentriert in hellgrauer ║
║ Farbe auf blauem Hintergrund. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 18
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine IREAD (INT,FOR,ZEI,SP,COL,SON,ART) ║
║Die Subroutine ermöglicht die Korrektur oder das Lesen eines Integer-║
║wertes vom Bildschirm. Die Tasten des Cursorblocks können dazu ║
║mitbenutzt werden. Die Darstellung erfolgt mit führenden Nullen. Wenn║
║der Integerwert zu groß für das Darstellungsfeld ist, wird es mit dem║
║Zeichen "#" gefüllt. Der Wert wird während der Korrektur farbinvers, ║
║nach der Korrektur farbnormal dargestellt. In der selben Zeile hinter║
║dem Korrekturfeld positionierte Texte (z. B. aus der Subroutine FMEL)║
║können bis zum Ende der Zeile überschrieben werden. Neben der ║
║<Return>-Tasten können weitere Tasten zum Abschluß der Routine ║
║bestimmt werden. Ob der bei der Übergabe vorhandene Wert korrigiert ║
║werden soll, oder ob ein neuer Wert einzulesen ist, ergibt sich aus ║
║dem Flag, das im letzten Parameter übergeben wird. Im dem Flag wird ║
║zurückgegeben, ob sich bei der Übergabe ein Integerwert im Lese/ ║
║Korrekturfeld befindet oder nicht. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Zu korrigierender Integerwert. ║
║INTEGER Anzahl der auszuschreibenden Ziffern des ║
║ Integerwertes (1 bis 11). ║
║INTEGER Bildschirmzeile in der der Integerwert korrigiert ║
║ werden soll (1 bis 25). ║
║INTEGER Bildschirmspalte ab der der Integerwert korrigiert ║
║ werden soll (1 bis 80). ║
║INTEGER Farbattribut; Siehe Anhang: "Farbattribute". Wenn ║
║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
║ Ausgabe im Schwarz/weiß-Modus. ║
║ Bit 0 - 2: Vordergrundfarbe ║
║ Bit 3 : Intensität der Vordergundfarbe ║
║ Bit 4 - 6: Hintergrundfarbe ║
║ Bit 7 : blinken ║
║INTEGER Bitmuster für Abschlußtasten und Sonderfunktion ║
║ 1: Text hinter Korrekturfeld löschen ║
║ 2: <Cursor rechts>-Taste ║
║ 4: <Cursor links>-Taste ║
║ 8: <Cursor aufwärts>-Taste ║
║ 16: <Cursor abwärts>-Taste ║
║ 32: <Bild aufwärts>-Taste ║
║ 64: <Bild abwärts>-Taste ║
║ 128: <Tabulator rechts>-Taste ║
║ 256: <Tabulator links>-Taste ║
║ 512: <Escape>-Taste ║
║ 1024: <F1>-Taste ║
║ 2048: <F2>-Taste ║
║ 4096: <F3>-Taste ║
║ 8192: <F4>-Taste ║
║ 16384: <F5>-Taste ║
║ 32768: <F6>-Taste ║
║ 65536: <F7>-Taste ║
║ 131072: <F8>-Taste ║
║ 262144: <F9>-Taste ║
║ 524288: <F10>-Taste ║
║ Die Funktionen können durch Addition miteinander ║
║ verknüpft werden. ║
Seite 19
║ Return: Bitmuster der Abschlußtaste ( <Return> = 1 )║
║INTEGER Flag, das aussagt, ob neuer Wert eingelesen werden ║
║ soll oder ob vorhandener Wert korrigiert werden ║
║ soll. ║
║ 0: Neuen Wert einlesen ║
║ 1: Vorhandenen Wert korrigieren. Vorhandene Ziffern ║
║ werden überschrieben oder werden übernommen. ║
║ 2: Vorhandenen Wert erhalten, bis die erste Zifer ║
║ geschrieben wird. ║
║ Return: Flag, das anzeigt, ob der Wert im Lese/ ║
║ Korrekturfeld vorhanden war oder nicht. ║
║ 0: Wert war vorhanden ║
║ 1: Es waren keinen Ziffern im Wertefeld ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: AREAD, AWRI ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: CALL IREAD (IWERT,6,10,20,23,1,1) ║
║ Die Programmzeile veranlaßt die Korrektur eines in ║
║ der Integervariablen IWERT enthaltenen Wertes. Die ║
║ Darstellung erfolgt sechsstellig mit führenden ║
║ Nullen in der 10. Zeile ab Spalte 20 in hellgrauer ║
║ Farbe auf blauem Hintergrund. Hinter dem ║
║ Korrekturfeld positionierter Text wird mit Blanks ║
║ überschrieben. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 20
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine IWRI (INT,ANZ,ZEI,SP,COL) ║
║Die Subroutine ermöglicht das positionierte Schreiben eines ║
║Integerwertes auf den Bildschirm. Die Darstellung erfolgt mit ║
║führenden Nullen. Wenn der Integerwert zu groß für das Darstellungs- ║
║feld ist, wird es mit dem Zeichen "#" gefüllt. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Zu schreibender Integerwert. ║
║INTEGER Anzahl der auszuschreibenden Ziffern des ║
║ Integerwertes (1 bis 12). ║
║INTEGER Bildschirmzeile in die der Integerwert geschrieben ║
║ werden soll (1 bis 25). ║
║INTEGER Bildschirmspalte ab der der Integerwert geschrieben ║
║ werden soll (1 bis 80). ║
║INTEGER Farbattribut; Siehe Anhang: "Farbattribute". Wenn ║
║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
║ Ausgabe im Schwarz/weiß-Modus. ║
║ Bit 0 - 2: Vordergrundfarbe ║
║ Bit 3 : Intensität der Vordergundfarbe ║
║ Bit 4 - 6: Hintergrundfarbe ║
║ Bit 7 : blinken ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: AWRI ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: CALL IWRI (IWERT,6,10,20,23) ║
║ Die Programmzeile veranlaßt das Ausschreiben des ║
║ in der Integerwariablen IWERT enthaltenen Wertes ║
║ sechsstellig, gegebenenfalls mit führenden Nullen. ║
║ Die Bildschirmausgabe erfolgt in der 10. Zeile ab ║
║ der 20. Spalte in hellgrauer Farbe auf blauem ║
║ Hintergrund. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 21
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine IWRIB (INT,ANZ,ZEI,SP,COL) ║
║Die Subroutine ermöglicht das positionierte Schreiben eines ║
║Integerwertes auf den Bildschirm. Die Darstellung erfolgt mit ║
║führenden Blanks. Wenn der Integerwert zu groß für das Darstellungs- ║
║feld ist, wird es mit dem Zeichen "#" gefüllt. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Zu schreibender Integerwert. ║
║INTEGER Anzahl der auszuschreibenden Ziffern des ║
║ Integerwertes (1 bis 12). ║
║INTEGER Bildschirmzeile in die der Integerwert geschrieben ║
║ werden soll (1 bis 25). ║
║INTEGER Bildschirmspalte ab der der Integerwert geschrieben ║
║ werden soll (1 bis 80). ║
║INTEGER Farbattribut; Siehe Anhang: "Farbattribute". Wenn ║
║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
║ Ausgabe im Schwarz/weiß-Modus. ║
║ Bit 0 - 2: Vordergrundfarbe ║
║ Bit 3 : Intensität der Vordergundfarbe ║
║ Bit 4 - 6: Hintergrundfarbe ║
║ Bit 7 : blinken ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: AWRI ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: CALL IWRIB (IWERT,6,10,20,23) ║
║ Die Programmzeile veranlaßt das Ausschreiben des ║
║ in der Integerwariablen IWERT enthaltenen Wertes ║
║ sechsstellig, gegebenenfalls mit führenden Blanks. ║
║ Die Bildschirmausgabe erfolgt in der 10. Zeile ab ║
║ der 20. Spalte in hellgrauer Farbe auf blauem ║
║ Hintergrund. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 22
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine RREAD (REAL,FOR,ZEI,SP,COL,SON,ART) ║
║Die Subroutine ermöglicht die Korrektur oder das Lesen eines Real- ║
║wertes am Bildschirm. Die Tasten des Cursorblocks können dazu ║
║mitbenutzt werden. Die Darstellung erfolgt mit führenden Nullen. Wenn║
║der Realwert zu groß für das Wertefeld ist, wird es mit dem Zeichen ║
║"#" gefüllt. Der Wert wird während der Bearbeitung farbinvers, danach║
║farbnormal am Bildschirm dargestellt. In der selben Zeile hinter dem ║
║Wertefeld positionierte Texte (z. B. aus der Subroutine FMEL) können ║
║bis zum Ende der Zeile überschrieben werden. Der Dezimalpunkt ist im ║
║Wertefeld dem übergebenen Fortran-Format entsprechend gesetzt, er ║
║kann jedoch bei der Korrektur überschrieben werden. Die Verwendung ║
║eines Kommas anstelle des Dezimalpunktes ist erlaubt. Ungültige ║
║Fortran-Formate werden korrigiert zurückgegeben. Neben der <Return>- ║
║Taste können weitere Tasten zum Abschluß der Routine bestimmt werden.║
║Ob der bei der Übergabe vorhandene Realwert korrigiert werden soll, ║
║oder ob ein neuer Wert einzulesen ist, ergibt sich aus dem Flag, das ║
║im letzten Parameter übergeben wird. Im dem Flag wird zurückgegeben, ║
║ob sich bei der Übergabe ein Realwert im Lese/Korrekturfeld befindet ║
║oder nicht. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║REAL zu korrigierender oder zu lesender Realwert. ║
║REAL Fortran-Format für die Darstellung des Realwertes ║
║ (bis 20.9 -10 Vorkommastellen, 9 Nachkommastellen-).║
║ Return: korrigiertes Fortran-Format ║
║INTEGER Bildschirmzeile in der der Realwert bearbeitet ║
║ werden soll (1 bis 25). ║
║INTEGER Bildschirmspalte ab der der Realwert bearbeitet ║
║ werden soll (1 bis 80). ║
║INTEGER Farbattribut; Siehe Anhang: "Farbattribute". Wenn ║
║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
║ Ausgabe im Schwarz/weiß-Modus. ║
║ Bit 0 - 2: Vordergrundfarbe ║
║ Bit 3 : Intensität der Vordergundfarbe ║
║ Bit 4 - 6: Hintergrundfarbe ║
║ Bit 7 : blinken ║
║INTEGER Bitmuster für Abschlußtasten und Sonderfunktion ║
║ 1: Text hinter Korrekturfeld löschen ║
║ 2: <Cursor rechts>-Taste ║
║ 4: <Cursor links>-Taste ║
║ 8: <Cursor aufwärts>-Taste ║
║ 16: <Cursor abwärts>-Taste ║
║ 32: <Bild aufwärts>-Taste ║
║ 64: <Bild abwärts>-Taste ║
║ 128: <Tabulator rechts>-Taste ║
║ 256: <Tabulator links>-Taste ║
║ 512: <Escape>-Taste ║
║ 1024: <F1>-Taste ║
║ 2048: <F2>-Taste ║
║ 4096: <F3>-Taste ║
║ 8192: <F4>-Taste ║
║ 16384: <F5>-Taste ║
║ 32768: <F6>-Taste ║
║ 65536: <F7>-Taste ║
Seite 23
║ 131072: <F8>-Taste ║
║ 262144: <F9>-Taste ║
║ 524288: <F10>-Taste ║
║ Die Funktionen können durch Addition miteinander ║
║ verknüpft werden. ║
║ Return: Bitmuster der Abschlußtaste ( <Return> = 1 )║
║INTEGER Flag, das aussagt, ob neuer Wert eingelesen werden ║
║ soll oder ob vorhandener Wert korrigiert werden ║
║ soll. ║
║ 0: Neuen Wert einlesen ║
║ 1: Vorhandenen Wert korrigieren. Vorhandene Ziffern ║
║ werden überschrieben oder werden übernommen. ║
║ 2: Vorhandenen Wert erhalten, bis die erste Zifer ║
║ geschrieben wird. ║
║ Return: Flag, das anzeigt, ob der Wert im Lese/ ║
║ Korrekturfeld vorhanden war oder nicht. ║
║ 0: Wert war vorhanden ║
║ 1: Es waren keinen Ziffern im Wertefeld ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: AREAD, AWRI, CHAWAL ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: CALL AREAD (RWERT,6.2,10,20,23,0,1) ║
║ Die Programmzeile veranlaßt die Korrektur eines in ║
║ der Realvariablen RWERT enthaltenen Wertes. Die ║
║ Darstellung erfolgt mit drei Vorkommastellen und ║
║ zwei Nachkommastellen eventuell mit führenden Nullen║
║ in der 10. Zeile ab Spalte 20 in hellgrauer Farbe ║
║ auf blauem Hintergrund. Hinter dem Korrekturfeld ║
║ positionierter Text wird mit Blanks überschrieben. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 24
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine RWRI (REAL,FOR,ZEI,SP,COL) ║
║Die Subroutine ermöglicht das positionierte Schreiben eines ║
║Realwertes auf den Bildschirm. Die Darstellung erfolgt mit führenden ║
║Nullen und Dezimalpunkt im angegebenen Fortran-Format. Wenn der ║
║Realwert zu groß für das Darstellungsfeld ist, wird es mit dem ║
║Zeichen "#" gefüllt. Die letzte Nachkommastelle wird gerundet. Wenn ║
║ein ungültiges Fortran-Format übergeben wurde, wird es korrigiert ║
║zurückgegeben. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║REAL Zu schreibender Realwert. ║
║REAL Fortran-Format des zu schreibenden Realwertes ║
║ (bis 22.9 -12 Vorkommastellen, 9 Nachkommastellen-).║
║ Return: korrigiertes Fortran-Format. ║
║INTEGER Bildschirmzeile in die der Realwert geschrieben ║
║ werden soll (1 bis 25). ║
║INTEGER Bildschirmspalte ab der der Realwert geschrieben ║
║ werden soll (1 bis 80). ║
║INTEGER Farbattribut; Siehe Anhang: "Farbattribute". Wenn ║
║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
║ Ausgabe im Schwarz/weiß-Modus. ║
║ Bit 0 - 2: Vordergrundfarbe ║
║ Bit 3 : Intensität der Vordergundfarbe ║
║ Bit 4 - 6: Hintergrundfarbe ║
║ Bit 7 : blinken ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: AWRI ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: CALL RWRI (RWERT,6.2,10,20,23) ║
║ Die Programmzeile veranlaßt das Ausschreiben des ║
║ in der Realvariablen RWERT enthaltenen Wertes ║
║ mit drei Vorkommastellen und zwei Nachkommastellen. ║
║ Die Bildschirmausgabe erfolgt in der 10. Zeile ab ║
║ der 20. Spalte in hellgrauer Farbe auf blauem ║
║ Hintergrund. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 25
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine RWRIB (REAL,FOR,ZEI,SP,COL) ║
║Die Subroutine ermöglicht das positionierte Schreiben eines ║
║Realwertes auf den Bildschirm. Die Darstellung erfolgt mit führenden ║
║Blanks und Dezimalpunkt im angegebenen Fortran-Format. Wenn der ║
║Realwert zu groß für das Darstellungsfeld ist, wird es mit dem ║
║Zeichen "#" gefüllt. Die letzte Nachkommastelle wird gerundet. Wenn ║
║ein ungültiges Fortran-Format übergeben wurde, wird es korrigiert ║
║zurückgegeben. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║REAL Zu schreibender Realwert. ║
║REAL Fortran-Format des zu schreibenden Realwertes ║
║ (bis 22.9 -12 Vorkommastellen, 9 Nachkommastellen-).║
║ Return: korrigiertes Fortran-Format. ║
║INTEGER Bildschirmzeile in die der Realwert geschrieben ║
║ werden soll (1 bis 25). ║
║INTEGER Bildschirmspalte ab der der Realwert geschrieben ║
║ werden soll (1 bis 80). ║
║INTEGER Farbattribut; Siehe Anhang: "Farbattribute". Wenn ║
║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
║ Ausgabe im Schwarz/weiß-Modus. ║
║ Bit 0 - 2: Vordergrundfarbe ║
║ Bit 3 : Intensität der Vordergundfarbe ║
║ Bit 4 - 6: Hintergrundfarbe ║
║ Bit 7 : blinken ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: AWRI ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: CALL RWRIB (RWERT,6.2,10,20,23) ║
║ Die Programmzeile veranlaßt das Ausschreiben des ║
║ in der Realvariablen RWERT enthaltenen Wertes ║
║ mit drei Vorkommastellen und zwei Nachkommastellen. ║
║ Die Bildschirmausgabe erfolgt in der 10. Zeile ab ║
║ der 20. Spalte in hellgrauer Farbe auf blauem ║
║ Hintergrund. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 26
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine DREAD (DATUM,ZEI,SP,COL,SON,ART) ║
║Die Subroutine ermöglicht das Lesen oder die Korrektur eines ║
║Datumsstrings von der Tastatur aus. Die Tasten des Cursorblocks können║
║dabei mitbenutzt werden. Das Datum wird positioniert in einem ║
║farbinversen Feld, nach dem Betätigen einer Abschlußtaste in einem ║
║farbnormalen Feld am Bildschirm dargestellt. In der selben Zeile ║
║hinter dem Datumsfeld positionierte Texte (z. B. aus der Subroutine ║
║FMEL) können bis zum Ende der Zeile gelöscht werden. Außer der ║
║<Return>-Taste können weitere Tasten zum Abschluß der Routine benutzt ║
║werden, die als Bitmuster übergeben werden. Das Bitmuster der zum ║
║Abschluß verwendeten Taste wird an das rufende Programm zurückgegeben.║
║Während der Eingabe wird eine Plausibilitätsprüfung durchgeführt. ║
║Erkannte Eingabefehler werden durch einen 880-Hertz-Ton angezeigt. Die║
║Übernahme vom und die Rückgabe zum rufenden Programm erfolgt in der ║
║Form JJJJMMTT, die Darstellung am Bildschirm erfolgt in der Form ║
║TT.MM.JJJJ. Ob das vom Programm übergebene Datum korrigiert werden ║
║soll oder ob ein neues Datum einzulesen ist, ergibt sich aus dem Flag,║
║das im letzten Parameter übergeben wird. In dem Flag wird zurück- ║
║gegeben, ob das gelesene bzw. korrigierte Datum Null ist oder nicht. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Datum in der Form JJJJMMTT. ║
║ Return: Gelesenes oder korrigiertes Datum in der Form║
║ JJJJMMTT. (J = Jahr, M = Monat, T = Tag) ║
║INTEGER Bildschirmzeile, in der das zu lesende oder zu ║
║ korrigierende Datum angezeigt werden soll (1 bis 25).║
║INTEGER Bildschirmspalte, ab der das zu zu lesende oder zu ║
║ korrigierende Datum angezeigt werden soll (1 bis 71).║
║INTEGER Farbattribut; Siehe Anhang: "Farbattribute". Wenn ein║
║ Monochrome-Monitor erkannt wird, erfolgt die Ausgabe ║
║ im Schwarz/Weiß-Modus. ║
║ Bit 0 - 2: Vordergrundfarbe ║
║ Bit 3 : Intensität der Vordergrundfarbe ║
║ Bit 4 - 6: Hintergrundfarbe ║
║ Bit 7 : blinken ║
║INTEGER Bitmuster für Abschlußtasten und Sonderfunktion ║
║ 1: Text hinter Korrekturfeld löschen ║
║ 2: <Cursor rechts>-Taste ║
║ 4: <Cursor links>-Taste ║
║ 8: <Cursor aufwärts>-Taste ║
║ 16: <Cursor abwärts>-Taste ║
║ 32: <Bild aufwärts>-Taste ║
║ 64: <Bild abwärts>-Taste ║
║ 128: <Tabulator rechts>-Taste ║
║ 256: <Tabulator links>-Taste ║
║ 512: <Escape>-Taste ║
║ 1024: <F1>-Taste ║
║ 2048: <F2>-Taste ║
║ 4096: <F3>-Taste ║
║ 8192: <F4>-Taste ║
║ 16384: <F5>-Taste ║
║ 32768: <F6>-Taste ║
║ 65536: <F7>-Taste ║
║ 131072: <F8>-Taste ║
Seite 27
║ 262144: <F9>-Taste ║
║ 524288: <F10>-Taste ║
║ Die Funktionen können durch Addition miteinander ║
║ verknüpft werden. ║
║ Return: Bitmuster der Abschlußtaste ( <Return> = 1 ) ║
║INTEGER Flag, das aussagt, ob ein neues Datum eingelesen ║
║ werden soll oder ob ein vorhandenes Datum korrigiert ║
║ werden soll. ║
║ 0: neues Datum einlesen ║
║ 1: vorhandenes Datum korrigieren ║
║ Return: Flag, das anzeigt, ob das gelesene oder ║
║ korrigierte Datum Null ist oder nicht. ║
║ 0: Datum ist Null ║
║ 1: Datum ist nicht Null ║
╟──────────────────────────────────────────────────────────────────────╢
║Subroutinen: ATTCOL,CTBUF ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiele: CALL DREAD (DATUM,10,20,23,0,0) ║
║ CALL DREAD (DATUM,10,20,23,255,1) ║
║ Die erste Programmzeile veranlaßt das Einlesen, die ║
║ zweite die Korrektur eines Datums. Die Bildschirm- ║
║ ausgabe erfolgt in der 10. Zeile und ab der 20. ║
║ Spalte in hellgrauer Farbe auf blauem Hintergrund. ║
║ Der hinter dem Datumsfeld positionierte Text bleibt ║
║ im ersten Fall erhalten, im zweiten Beispiel wird er ║
║ gelöscht. Außerdem ist der Abschluß im zweiten ║
║ Beispiel durch alle Cursortasten möglich. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 28
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine DWRI (DATUM,ZEI,SP,COL) ║
║Die Subroutine ermöglicht das positionierte Schreiben eines ║
║Datumstrings auf den Bildschirm. Das Datum wird als Integervariable ║
║der Form JJJJMMTT eingelesen. Die Ausgabe erfolgt in der Form ║
║TT.MM.JJJJ. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Datum in der Form JJJJMMTT. ║
║ (J = Jahr, M = Monat, T = Tag) ║
║INTEGER Bildschirmzeile, in die das Datum geschrieben werden ║
║ soll (1 bis 25). ║
║INTEGER Bildschirmspalte, ab der das Datum geschrieben werden║
║ soll (1 bis 71). ║
║INTEGER Farbattribut; Siehe Anhang: "Farbattribute". Wenn ein║
║ Monochrome-Monitor erkannt wird, erfolgt die Ausgabe ║
║ im Schwarz/Weiß-Modus. ║
║ Bit 0 - 2: Vordergrundfarbe ║
║ Bit 3 : Intensität der Vordergrundfarbe ║
║ Bit 4 - 6: Hintergrundfarbe ║
║ Bit 7 : blinken ║
╟──────────────────────────────────────────────────────────────────────╢
║Subroutinen: ATTCOL ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiel: CALL DWRI (19890730,10,20,23) ║
║ Die Programmzeile veranlaßt das Schreiben des Strings║
║ "30.07.1989" auf den Bildschirm. Die Ausgabe ║
║ erfolgt in der 10. Zeile und ab der 20. Spalte in ║
║ hellgrauer Farbe auf blauem Hintergrund. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 29
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine FMEL (TEXT,ANZ,FNR,ZEI,SP,COL) ║
║Die Subroutine schreibt eine Fehlermeldung positioniert auf den ║
║Bildschirm. Wenn "FNR" eins ist, wird die in "TEXT" übergebene ║
║Fehlermeldung an der Position "ZEI","SP" auf den Bildschirm ║
║geschrieben. Wenn in "FNR" eine zwei steht, erfolgt die Ausgabe ║
║um 16 Stellen nach rechts versetzt (z. B. wenn schon eine Fehler- ║
║meldung vorhanden ist). Wenn in "FNR" eine drei steht, wird der ║
║Standardfehlertext "Wert fehlerhaft" um 16 Stellen nach rechts ║
║versetzt ausgegeben. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║CHARACTERSTRING Fehlermeldung [max. 15 Zeichen ]; hinter dem letzten║
║ zu schreibenden Zeichen kann ein Null-Character als ║
║ Terminator angefügt werden. ║
║INTEGER Anzahl der zu schreibenden Zeichen. Es werden ║
║ soviele Zeichen geschrieben, bis entweder die Anzahl║
║ erreicht ist oder ein Null-Character gefunden wird ║
║ oder das 15. Zeichen geschrieben wurde. ║
║INTEGER Fehlernummer [1 bis 3]. ║
║ 1: Ausgabe an der angegebenen Position. ║
║ 2: Ausgabe um 16 Stellen nach rechts versetzt. ║
║ 3: Ausgabe der Standardfehlermeldung um 16 Stellen ║
║ nach rechts versetzt. ║
║INTEGER Zeile in die die Fehlermeldung geschrieben werden ║
║ soll. Der Wert darf zwischen 1 und 25 liegen. ║
║INTEGER Spalte ab der die Fehlermeldung geschrieben werden ║
║ soll (eventuell um 16 Stellen nach rechts versetzt).║
║ Der Wert darf zwischen 1 und 80 liegen. ║
║INTEGER Farbattribut; siehe Anhang: "Farbattribute". Wenn ║
║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
║ Ausgabe im Schwarz/Weiß-Modus. ║
║ Bit 0 - 2: Vordergrundfarbe ║
║ Bit 3 : Intensität der Vordergrundfarbe ║
║ Bit 4 - 6: Hintergrundfarbe ║
║ Bit 7 : blinken ║
║ Die Darstellung erfolgt mit dem inversierten ║
║ Farbattribut. ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: ATTRIB,AWRI ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: CALL FMEL ('Wert zu groß!',13,1,10,20,23) ║
║ Die Fehlermeldung erscheint in der 10. Zeile ab ║
║ Spalte 20 in blauer Farbe auf hellgrauem ║
║ Hintergrund. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 30
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine TAST (ZEICHEN,FLAG) ║
║Die Subroutine liest ein Zeichen aus der Tastatur und gibt den Code ║
║des Zeichens und ein Flag über die Art des Zeichens an das rufende ║
║Programm zurück. Die Subroutine kann dabei im Wartestatus oder im ║
║Nichtwartestatus betrieben werden. Im Wartestatus wird die Ausführung ║
║des Programms unterbrochen, bis ein Zeichen aus dem Tastaturbuffer ║
║gelesen werden kann. Im Nichtwartestatus wird das Programm ║
║weitergeführt, wenn kein Zeichen im Tastaturbuffer vorhanden ist. ║
║Dabei werden die übergebenen Parameter nicht verändert, damit die ║
║Subroutine in einer Schleife betrieben werden kann. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Return: Code des gelesenen Zeichens. ║
║INTEGER Flag für den Wartestatus: ║
║ 0: Nichtwartestatus ║
║ ungleich 0: Wartestatus ║
║ Return: Flag für die Art des gelesenen Zeichens: ║
║ 1: Zeichen 'A' - 'Z' und Ä, Ö, Ü ║
║ 2: Zeichen 'a' - 'z' und ä, ö, ü, ß ║
║ 3: Zeichen '0' - '9', '+', '-' oder '.' ║
║ 4: Restliche ASCII-Zeichen ║
║ 5: Return- oder Entertaste ║
║ 6: CTRL-C-Taste ║
║ 7: Steuercodes 0 - 31 ║
║ 10: Curser-Steuertasten ║
║ 11: Funktionstasten 1 - 40 ║
║ 12: ALT-Taste und numerisches oder alphanumerisches ║
║ Zeichen ║
║ 13: CTRL-Taste und Curser-Steuertaste ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiel: J=1 ║
║ CALL TAST (I,J) ║
║ Die Routine wartet, bis ein Zeichen aus dem ║
║ Tastaturbuffer gelesen werden kann. in I wird der ║
║ Code des Zeichens, in J ein Flag über die Art des ║
║ Zeichens übergeben. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 31
Blockweise Ein- und Ausgabe am Bildschirm
Unter blockweiser Ein- und Ausgabe am Bildschirm ist die lesende oder
schreibende Bearbeitung eines Bildschirmausschnitts oder des ganzen
Bildschirms gemeint. Bildschirmausschnitte können dabei durch
Positions- und Größenangaben positioniert und dimensioniert werden. Die
Farbe des Hinter- und Vordergrunds des Bildschirmausschnitts kann durch
die Wahl eines Farbattributs bestimmt werden. Eine Liste mit allen
möglichen Farbattributen befindet sich im Anhang des Benutzerhandbuchs.
Subroutinen zur blockweisen Ein- und Ausgabe am Bildschirm
LOES a) Bildschirmausschnitt mit Hintergrundfarbe löschen
b) Bildschirmausschnitt mit Zeichen beschreiben
RAHM a) Bildschirmausschnitt umrahmen
SCREEN a) Text eines Bildschirmausschnitts in ein Feld einlesen
b) Attribute eines Bildschirmausschnitts in ein Feld einlesen
c) Inhalt eines Characterfeldes in einem Bildschirmausschnitt
ausgeben
d) Inhalt eines Characterfeldes als Farbattribute eines
Bildschirmausschnitts ausgeben
e) Text und Attribute eines Bildschirmausschnitts in ein Feld
einlesen
f) Text und Attribute aus einem Characterfeld in einen
Bildschirmausschnitt schreiben
WIND a) Bildschirmausschnitt aufwärts scrollen
b) Bildschirmausschnitt abwärts scrollen
Seite 32
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine LOES (H,B,ZEI,SP,ZEICH,COL,ART) ║
║Die Subroutine löscht einen Bildschirmausschnitt bzw. überschreibt ║
║ihn mit dem in "ZEICH" angegebenen Zeichen und dem in "COL" ║
║angegebenen Farbattribut. Das Farbattribut kann dem Inhalt von "ART" ║
║entsprechend variiert werden. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Höhe des zu löschenden Bildschirmausschnittes in ║
║ Zeilen [1 BIS 43]. ║
║INTEGER Breite des zu löschenden Bildschirmausschnittes in ║
║ Spalten [1 bis 80]. ║
║INTEGER Zeile von der an gelöscht werden soll [1 bis 43]. ║
║INTEGER Spalte von der an gelöscht werden soll [1 bis 80]. ║
║INTEGER ASCII-Code des Zeichens, mit dem gelöscht werden ║
║ soll [0 bis 255]. ║
║INTEGER Farbattribut; siehe Anhang: "Farbattribute". Wenn ║
║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
║ Ausgabe im Schwarz/Weiß-Modus. ║
║ Bit 0 - 2: Vordergrundfarbe ║
║ Bit 3 : Intensität der Vordergrundfarbe ║
║ Bit 4 - 6: Hintergrundfarbe ║
║ Bit 7 : blinken ║
║INTEGER Art der Darstellung: ║
║ 0: Farbattribut normal ║
║ 1: Farbattribut inverse ║
║ 2: Farbattribut intensiv ║
║ 3: Farbattribut blinkend ║
║ 4: Farbattribut intensiv/inverse ║
║ 5: Farbattribut normal im 40 Zeichen/Zeile-Modus ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: ATTRIB,POKE,SCPRF ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: CALL LOES (10,10,10,20,32,23,0) ║
║ Ab der 10. Zeile und der 20. Spalte wird ein ║
║ Bildschirmfenster von 10 mal 10 Zeichen Größe mit ║
║ Blanks überschrieben. Das gelöschte Feld hat eine ║
║ blaue Farbe. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 33
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine RAHM (H,B,ZEI,SP,FORM,COL,ART) ║
║Die Subroutine zeichnet einen Rahmen mit der in "FORM" angegebenen ║
║Form positioniert auf den Bildschirm. Der Rahmen wird mit dem in ║
║"COL" angegebenen Farbattribut dargestellt. Das Farbattribut kann ║
║dem Inhalt von "ART" entsprechend variiert werden. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Höhe des Rahmens in Zeilen [3 bis 43]. ║
║INTEGER Breite des Rahmens in Spalten [3 bis 80]. ║
║INTEGER Zeile von der an der Rahmen gezeichnet werden soll ║
║ [1 bis 42]. ║
║INTEGER Spalte von der an der Rahmen gezeichnet werden soll ║
║ [1 bis 79]. ║
║INTEGER Kennung für die Rahmenform: ║
║ 0: ╔ ║
║ 1: ┌ ║
║ 2: █ ║
║ 3: * ║
║ 4: Blank ║
║INTEGER Farbattribut; siehe Anhang: "Farbattribute". Wenn ║
║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
║ Ausgabe im Schwarz/Weiß-Modus. ║
║ Bit 0 - 2: Vordergrundfarbe ║
║ Bit 3 : Intensität der Vordergrundfarbe ║
║ Bit 4 - 6: Hintergrundfarbe ║
║ Bit 7 : blinken ║
║INTEGER Art der Darstellung: ║
║ 0: Farbattribut normal ║
║ 1: Farbattribut inverse ║
║ 2: Farbattribut intensiv ║
║ 3: Farbattribut blinkend ║
║ 4: Farbattribut intensiv/inverse ║
║ 5: Farbattribut normal im 40 Zeichen/Zeile-Modus ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: ATTRIB,POKE,SCPRF ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: CALL RAHM (10,10,10,20,0,23,0) ║
║ Ab der 10. Zeile und der 20. Spalte wird ein ║
║ Doppelrahmen von 10 mal 10 Zeichen Größe in ║
║ hellgrauer Farbe auf blauem Hintergrund gezeichnet. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 34
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine SCREEN (ART,FELD,H,B,ZEI,SP) ║
║Die Subroutine ermöglicht das positionierte Schreiben oder Lesen ║
║eines Textblocks oder Farbattributblocks oder eines Text/Attribut- ║
║Blocks vom bzw. zum Bildschirm. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Art der Bearbeitung: ║
║ 00: Textblock vom Bildschirm lesen ║
║ 01: Block mit Farbattributen vom Bildschirm lesen ║
║ 10: Textblock zum Bildschirm schreiben ║
║ 11: Block mit Bildschirmattributen schreiben ║
║ 100: Text und Attribute zum Bildschirm schreiben ║
║ 101: Text und Attribute vom Bildschirm lesen ║
║CHARACTERFELD Feld der Form [ FELD(H)*B ] mit Text oder mit ║
║ Farbattributen, das zum Bildschirm geschrieben ║
║ werden soll; ║
║ oder Return: Feld der Form [ FELD(H)*B ] in das Text║
║ oder Farbattribute vom Bildschirm geschrieben werden║
║ soll. ║
║INTEGER Höhe des Text- oder Attributfeldes in Zeilen. ║
║INTEGER Breite des Text- oder Attributfeldes in Spalten. ║
║INTEGER Zeile in der Text- oder Attributfeld beginnt. ║
║INTEGER Spalte in der Text- oder Attributfeld beginnt. ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: PEEKS,PEEK,POKES,POKE,SCPRF ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: CHARACTER FELD(10)*60 ║
║ CALL SCREEN (0,FELD,10,60,5,8) ║
║ Der Text der der sich in den Zeilen 5 bis 10 und den║
║ Spalten 8 bis 68 auf dem Bildschirm befindet, wird ║
║ in das Characterfeld FELD eingelesen und steht dort ║
║ für die spätere Weiterverarbeitung zur Verfügung. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 35
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine WIND (ART,ANZ,ZEIOL,SPOL,ZEIUR,SPUR,COL) ║
║Die Subroutine scrollt ein mit den Diagonalkoordinaten definiertes ║
║Textfenster auf dem Bildschirm ANZ Zeilen auf- oder abwärts. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Flag für die Art des Scrollens: ║
║ 0: aufwärts scrollen ║
║ 1: abwärts scrollen ║
║INTEGER Anzahl der zu scrollenden Zeilen. ║
║INTEGER Zeile der linken oberen Ecke des Textfensters ║
║INTEGER Spalte der linken oberen Ecke des Textfensters ║
║INTEGER Zeile der rechten unteren Ecke des Textfensters ║
║INTEGER Spalte der rechten unteren Ecke des Textfensters ║
║INTEGER Farbattribut; Siehe Anhang: "Farbattribute". Wenn ein║
║ Monochrome-Monitor erkannt wird, erfolgt die Ausgabe ║
║ im Schwarz/weiß-Modus. ║
║ Bit 0 - 2: Vordergrundfarbe ║
║ Bit 3 : Intensität der Vordergundfarbe ║
║ Bit 4 - 6: Hintergrundfarbe ║
║ Bit 7 : blinken ║
╟──────────────────────────────────────────────────────────────────────╢
║Subroutinen: ATTCOL ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiel: CALL WIND (0,1,5,10,15,70,23) ║
║ Das Textfenster mit den Diagonalkoordinaten Zeile 5, ║
║ Spalte 10 und Zeile 15, Spalte 70 wird um eine Zeile ║
║ nach oben gescrollt. Die nachrückende Zeile hat eine ║
║ blaue Hintergrundfarbe. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 36
Menüsteuerung
Die Menüsteuerung ermöglicht das menügeführte Verzweigen innerhalb eines
Programms. Prinzipiell sind einfache und mehrfache Menüauswahlen sowie
einfache Abfragen möglich. Die einfache Auswahl stellt aus einer Anzahl
Optionen eine einzige Option zur Verfügung. Das Programm verzweigt in
die durch die Option vorgegebene Richtung. Eine mehrfache Auswahl wird
notwendig, wenn mehrere Optionen während des Programmablaufs
berücksichtigt werden sollen. Einfache und mehrfache Auswahlen sind
entweder cursorgesteuert oder durch die Eingabe von Kennbuchstaben
möglich. Neben den Menüauswahlen ist die Verzweigung innerhalb eines
Programms durch Abfragen sinnvoll. Abfragen erwarten als Antworten
vorgegebene Zeichen wie z.B. "Ja" oder "Nein" oder eine Ziffer.
Subroutinen zur Menüsteuerung
MENTXT a) Text aus einer direct organisierten Datei in Form eines ein-
oder mehrspaltigen Menüs auf dem Bildschirm positionieren
VARTXT a) Text aus einem Characterfeld in Form eines ein- oder
mehrspaltigen Menüs auf dem Bildschirm positionieren
MENAKT a) einfache cursorgesteuerte Menüauswahl
b) mehrfache cursorgesteuerte Menüauswahl
c) mehrfache cursorgesteuerte Menüauswahl unter Berücksichtigung
vorher ausgewählter Menüpunkte
d) mehrfache cursorgesteuerte Menüauswahl unter Berücksichtigung
der Auswahlreihenfolge
MEAAKT a) einfache cursorgesteuerte Menüauswahl mit Abschlußtasten
b) mehrfache cursorgesteuerte Menüauswahl mit Abschlußtasten
c) mehrfache cursorgesteuerte Menüauswahl mit Abschlußtasten
unter Berücksichtigung vorher ausgewählter Menüpunkte
d) mehrfache cursorgesteuerte Menüauswahl mit Abschlußtasten
unter Berücksichtigung der Auswahlreihenfolge
OPTION a) einfache oder mehrfache Menüauswahl mit Kennbuchstaben
FRAG a) Abfrage für die Antworten "J", "N", "j" oder "n"
ZIFRAG a) Abrage für die Antwort mit den Ziffern "0" bis "9"
Seite 37
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine MENTXT (ANZ,LAN,SPZ,ZEI,SP,UNIT,SNR,COL) ║
║Die Subroutine liest aus einer direkt organisierten Datei Texte und ║
║bringt diese in der Form eines Menüfeldes auf den Bildschirm. Das ║
║Menüfeld wird mit einen Rahmen umgeben. Die Subroutine dient zur ║
║Vorbereitung der Menütexte für die Subroutine MENAKT. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Anzahl der zur Verfügung stehenden Menütexte ║
║ [1 bis 200]. ║
║INTEGER Länge jedes dargestellten Menütextes [1 bis 80] ║
║INTEGER Anzahl der pro Zeile dargestellten Menütexte ║
║ [1 bis 40]. ║
║INTEGER Zeile in der das Menüfeld beginnt (Rahmen) ║
║INTEGER Spalte in der das Menüfeld beginnt [1 bis 78] oder ║
║ 100 für automatische Mittenzentrierung des ║
║ Menüfeldes (Rahmen) oder 200 für automatische ║
║ Mittenzentrierung und Ausgleich einer ungeraden ║
║ Darstellungsbreite (Rahmen). ║
║INTEGER Unit der direkt organisierten Datei, aus der die ║
║ Menütexte gelesen werden sollen. ║
║INTEGER Satznummer des ersten Menütextes in der direkt ║
║ organisierten Datei. ║
║INTEGER Farbattribut; siehe Anhang: "Farbattribute". Wenn ║
║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
║ Ausgabe im Schwarz/Weiß-Modus. ║
║ Bit 0 - 2: Vordergrundfarbe ║
║ Bit 3 : Intensität der Vordergrundfarbe ║
║ Bit 4 - 6: Hintergrundfarbe ║
║ Bit 7 : blinken ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: AWRI,RAHM ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: CALL MENTXT (6,20,2,10,100,10,200,23) ║
║ Die Subroutine liest aus der Datei mit dem Unit 10 ║
║ sechs Zeilen Menütext ab der Recordnummer 200. ║
║ Innerhalb eines Rahmens, der ab der 10. Zeile ║
║ mittenzentriert auf den Bildschirm gebracht wird, ║
║ werden die sechs Texte zweispaltig dargestellt. Die ║
║ Texte sind dabei 20 Zeichen lang. Die Farbe des ║
║ Rahmens und der Texte ist hellgrau auf blauem ║
║ Hintergrund. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 38
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine VARTXT (ANZ,LAN,SPZ,ZEI,SP,FELD,COL) ║
║Die Subroutine liest aus einem Characterfeld Menütexte und ║
║bringt diese in der Form eines Menüfeldes auf den Bildschirm. Das ║
║Menüfeld wird mit einen Rahmen umgeben. Die Subroutine dient zur ║
║Vorbereitung der Menütexte für die Subroutine MENAKT. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Anzahl der zur Verfügung stehenden Menütexte ║
║ [1 bis 200]. ║
║INTEGER Länge jedes dargestellten Menütextes [1 bis 80] ║
║INTEGER Anzahl der pro Zeile dargestellten Menütexte ║
║ [1 bis 40]. ║
║INTEGER Zeile in der das Menüfeld beginnt (Rahmen) ║
║INTEGER Spalte in der das Menüfeld beginnt [1 bis 78] oder ║
║ 100 für automatische Mittenzentrierung des ║
║ Menüfeldes (Rahmen) oder 200 für automatische ║
║ Mittenzentrierung und Ausgleich einer ungeraden ║
║ Darstellungsbreite (Rahmen). ║
║CHARACTERFELD Feld, aus dem die Menütexte verwendet werden sollen.║
║ [FELD(ANZ)*LAN] ║
║INTEGER Farbattribut; siehe Anhang: "Farbattribute". Wenn ║
║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
║ Ausgabe im Schwarz/Weiß-Modus. ║
║ Bit 0 - 2: Vordergrundfarbe ║
║ Bit 3 : Intensität der Vordergrundfarbe ║
║ Bit 4 - 6: Hintergrundfarbe ║
║ Bit 7 : blinken ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: AWRI,RAHM ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: CALL VARTXT (6,20,2,10,100,FELD,23) ║
║ Die Subroutine liest aus dem Feld 6 Mmenütexte ein. ║
║ Innerhalb eines Rahmens, der ab der 10. Zeile ║
║ mittenzentriert auf den Bildschirm gebracht wird, ║
║ werden die sechs Texte zweispaltig dargestellt. Die ║
║ Texte sind dabei 20 Zeichen lang. Die Farbe des ║
║ Rahmens und der Texte ist hellgrau auf blauem ║
║ Hintergrund. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 39
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine ║
║MENAKT (ANZ,LAN,SPZ,ZEI,SP,ART,FELD,MZEI,MSP,COL) ║
║Die Subroutine ermöglicht die cursorgesteuerte Auswahl einer oder ║
║mehrerer Optionen aus einem Menüfeld des Bildschirms. Die Texte im ║
║Menüfeld müssen schon vorhanden sein (z.B. Subroutine MENTXT). Die ║
║Routine gibt die ausgewählten Optionen in einem Feld zurück. In der ║
║Zeile "MZEI" ab derSpalte "MSP" kann eine Meldung über die aktiven ║
║Tasten und deren Aktionen angezeigt werden. Die Meldung ist bei ║
║mehrfacher Auswahl 39 Zeichen, bei einfacher Auswahl nur 16 Zeichen. ║
║Die jeweils aktuelle Option wird mit intensivierter Farbe gezeigt, ║
║ausgewählte Optionen werden inverse dargestellt. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Anzahl der zur Verfügung stehenden Optionen ║
║ [1 bis 200]. ║
║INTEGER Länge jedes dargestellten Menütextes [1 bis 80] ║
║INTEGER Anzahl der pro Zeile dargestellten Menütexte ║
║ [1 bis 40]. ║
║INTEGER Zeile in der das Menüfeld beginnt (Rahmen aus ║
║ Subroutine MENTXT) [1 bis 23]. ║
║INTEGER Spalte in der das Menüfeld beginnt [1 bis 78] oder ║
║ 100 für automatische Mittenzentrierung des ║
║ Menüfeldes. ║
║INTEGER Art der Optionsausionswahl ║
║ -5: Mehrere Optionen können additiv ausgewählt ║
║ werden, im Feld vorhandene Auswahlen werden ║
║ gelöscht. Das Feld wird in der Reihenfolge der ║
║ Auswahl aufsteigend mit den Ziffern der ║
║ gewählten Optionsfelder belegt. Das nächste ║
║ Textfeld wird automatisch aktuell. ║
║ -4: Mehrere Optionen können additiv ausgewählt ║
║ werden, im Feld vorhandene Auswahlen bleiben ║
║ erhalten. Das nächste Textfeld wird automatisch ║
║ aktuell. ║
║ -3: Mehrere Optionen können additiv ausgewählt ║
║ werden. Im Feld vorhandene Auswahlen werden ║
║ gelöscht. Das nächste Textfeld wird automatisch ║
║ aktuell. ║
║ -2: Mehrere Optionen können additiv ausgewählt ║
║ werden, im Feld vorhandene Auswahlen werden ║
║ gelöscht. Das Feld wird in der Reihenfolge der ║
║ Auswahl aufsteigend mit den Ziffern der ║
║ gewählten Optionsfelder belegt. Das momentane ║
║ Textfeld bleibt aktuell. ║
║ -1: Mehrere Optionen können additiv ausgewählt ║
║ werden, im Feld vorhandene Auswahlen bleiben ║
║ erhalten. Das momentane Textfeld bleibt aktuell.║
║ 0: Mehrere Optionen können additiv ausgewählt ║
║ werden. Im Feld vorhandene Auswahlen werden ║
║ gelöscht. Das momentane Textfeld bleibt aktuell.║
║ 1: Nur eine Option kann ausgewählt werden, im Feld ║
║ vorhandene Auswahlen werden nicht dargestellt. ║
║ 2: Nur eine Option kann ausgewählt werden, die ║
║ erste im Feld vorhandene Auswahl wird dem ║
Seite 40
║ Benutzer intensiv unterlegt angeboten. ║
║INTEGERFELD Return: Optionen. Ausgewählte Optionen werden mit ║
║ der Nummer des Optionsfeldes belegt, nicht gewählte ║
║ Optionen werden Null gesetzt [ FELD(ANZ) ]. ║
║INTEGER Zeile in der eine Meldung über die aktiven Tasten ║
║ und deren Aktionen ausgegeben wird oder Null, wenn ║
║ keine Meldung ausgegeben werden soll oder 100, wenn ║
║ in der Zeile unter dem Menüfeld ausgegeben werden ║
║ soll. ║
║INTEGER Spalte ab der eine Meldung über die aktiven Tasten ║
║ und deren Aktionen ausgegeben wird oder Null, wenn ║
║ keine Meldung ausgegeben werden soll oder 100, wenn ║
║ mittenzentriert ausgegeben werden soll. ║
║INTEGER Farbattribut; siehe Anhang: "Farbattribute". Wenn ║
║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
║ Ausgabe im Schwarz/Weiß-Modus. ║
║ Bit 0 - 2: Vordergrundfarbe ║
║ Bit 3 : Intensität der Vordergrundfarbe ║
║ Bit 4 - 6: Hintergrundfarbe ║
║ Bit 7 : blinken ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: ATTRIB,AWRI,CTBUF,LOES,SCREEN,TAST ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: INTEGER FELD(6) ║
║ CALL MENAKT (6,20,2,10,100,1,FELD,24,34,23) ║
║ Die Menütexte müssen schon am Bildschirm vorhanden ║
║ sein (z. B. aus der Subroutine MENTXT). ║
║ Ab der 10. Zeile wird ein zweispaltiges Menüfeld ║
║ mit 6 Elementen mittenzentriert über die Menütexte ║
║ gelegt. Mit Hilfe der Cursortasten kann aus sechs ║
║ Optionen eine ausgewählt werden, deren Äquivalent ║
║ in FELD ungleich Null gesetzt wird. Das Menüfeld ║
║ hat einen blauen Hintergrund. In Zeile 24 werden ║
║ Informationen über die aktiven Tasten geschrieben. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 41
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine ║
║MEAAKT (ANZ,LAN,SPZ,ZEI,SP,ART,FELD,COL,ABT) ║
║Die Subroutine ermöglicht die cursorgesteuerte Auswahl einer oder ║
║mehrerer Optionen aus einem Menüfeld des Bildschirms. Die Texte im ║
║Menüfeld müssen schon vorhanden sein (z.B. Subroutine MENTXT). Die ║
║Routine gibt die ausgewählten Optionen in einem Feld zurück. ║
║Die jeweils aktuelle Option wird mit intensivierter Farbe gezeigt, ║
║ausgewählte Optionen werden inverse dargestellt. Die zur Beendigung ║
║der Auswahl zugelassenen Tasten werden in ABT als Bitmuster ║
║übergeben. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Anzahl der zur Verfügung stehenden Optionen ║
║ [1 bis 200]. ║
║INTEGER Länge jedes dargestellten Menütextes [1 bis 80] ║
║INTEGER Anzahl der pro Zeile dargestellten Menütexte ║
║ [1 bis 40]. ║
║INTEGER Zeile in der das Menüfeld beginnt (Rahmen aus ║
║ Subroutine MENTXT) [1 bis 23]. ║
║INTEGER Spalte in der das Menüfeld beginnt [1 bis 78] oder ║
║ 100 für automatische Mittenzentrierung des ║
║ Menüfeldes. ║
║INTEGER Art der Optionsausionswahl ║
║ -5: Mehrere Optionen können additiv ausgewählt ║
║ werden, im Feld vorhandene Auswahlen werden ║
║ gelöscht. Das Feld wird in der Reihenfolge der ║
║ Auswahl aufsteigend mit den Ziffern der ║
║ gewählten Optionsfelder belegt. Das nächste ║
║ Textfeld wird automatisch aktuell. ║
║ -4: Mehrere Optionen können additiv ausgewählt ║
║ werden, im Feld vorhandene Auswahlen bleiben ║
║ erhalten. Das nächste Textfeld wird automatisch ║
║ aktuell. ║
║ -3: Mehrere Optionen können additiv ausgewählt ║
║ werden. Im Feld vorhandene Auswahlen werden ║
║ gelöscht. Das nächste Textfeld wird automatisch ║
║ aktuell. ║
║ -2: Mehrere Optionen können additiv ausgewählt ║
║ werden, im Feld vorhandene Auswahlen werden ║
║ gelöscht. Das Feld wird in der Reihenfolge der ║
║ Auswahl aufsteigend mit den Ziffern der ║
║ gewählten Optionsfelder belegt. Das momentane ║
║ Textfeld bleibt aktuell. ║
║ -1: Mehrere Optionen können additiv ausgewählt ║
║ werden, im Feld vorhandene Auswahlen bleiben ║
║ erhalten. Das momentane Textfeld bleibt aktuell.║
║ 0: Mehrere Optionen können additiv ausgewählt ║
║ werden. Im Feld vorhandene Auswahlen werden ║
║ gelöscht. Das momentane Textfeld bleibt aktuell.║
║ 1: Nur eine Option kann ausgewählt werden, im Feld ║
║ vorhandene Auswahlen werden nicht dargestellt. ║
║ 2: Nur eine Option kann ausgewählt werden, die ║
║ erste im Feld vorhandene Auswahl wird dem ║
║ Benutzer intensiv unterlegt angeboten. ║
Seite 42
║INTEGERFELD Return: Optionen. Ausgewählte Optionen werden mit ║
║ der Nummer des Optionsfeldes belegt, nicht gewählte ║
║ Optionen werden Null gesetzt [ FELD(ANZ) ]. ║
║INTEGER Farbattribut; siehe Anhang: "Farbattribute". Wenn ║
║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
║ Ausgabe im Schwarz/Weiß-Modus. ║
║ Bit 0 - 2: Vordergrundfarbe ║
║ Bit 3 : Intensität der Vordergrundfarbe ║
║ Bit 4 - 6: Hintergrundfarbe ║
║ Bit 7 : blinken ║
║INTEGER Bitmuster für Abschlußtasten zum Beenden der ║
║ mehrfachen Auswahl: ║
║ 1: <Return>-Taste ║
║ 32: <Bild-aufwärts>-Taste ║
║ 64: <Bild-abwärts>-Taste ║
║ 128: <Tabulator rechts>-Taste ║
║ 256: <Tabulator links>-Taste ║
║ 512: <Escape>-Taste ║
║ 1024: <F1>-Taste ║
║ 2048: <F2>-Taste ║
║ 4096: <F3>-Taste ║
║ 8192: <F4>-Taste ║
║ 16384: <F5>-Taste ║
║ 32768: <F6>-Taste ║
║ 65536: <F7>-Taste ║
║ 131072: <F8>-Taste ║
║ 262144: <F9>-Taste ║
║ 524288: <F10>-Taste ║
║ Die Abschlußtasten können durch Addition miteinander║
║ verknüpft werden. ║
║ Return: Bitmuster der Abschlußtaste ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: ATTRIB,AWRI,CTBUF,LOES,SCREEN,TAST ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: INTEGER FELD(6) ║
║ CALL MEAAKT (6,20,2,10,100,1,FELD,23,513) ║
║ Die Menütexte müssen schon am Bildschirm vorhanden ║
║ sein (z. B. aus der Subroutine MENTXT). ║
║ Ab der 10. Zeile wird ein zweispaltiges Menüfeld ║
║ mit 6 Elementen mittenzentriert über die Menütexte ║
║ gelegt. Mit Hilfe der Cursortasten kann aus sechs ║
║ Optionen eine ausgewählt werden, deren Äquivalent ║
║ in FELD ungleich Null gesetzt wird. Das Menüfeld ║
║ hat einen blauen Hintergrund. Zum Abschluß sind die ║
║ Tasten RETURN und ESCAPE zugelassen. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 43
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine OPTION (STRING,ANZ,MZEI,MSP,RSP,COL) ║
║Die Subroutine liest in einen String ein oder mehrere der ANZ ersten ║
║Zeichen des Alphabets als zugelassene Antworten ein. Der zu den ║
║Zeichen gehörende Text muß sich schon auf dem Bildschirm befinden. ║
║Hinter dem Text "Bitte Optionen auswählen", der in Zeile MZEI und ab ║
║Spalte MSP auf dem Bildschirm ausgegeben wird, werden die gewählten ║
║Zeichen ab Spalte RSP eingelesen. Die gewählten Zeichen werden in ║
║Großbuchstaben konvertiert. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║CHARACTERSTRING Return: String, in den die gewählten Zeichen ║
║ eingelesen werden [bis zu ANZ Characters]. ║
║INTEGER Anzahl der maximal auszuwählenden Optionen ║
║ [1 bis 26]. ║
║INTEGER Zeile für den Hinweistext und für den Antwortstring ║
║ [1 bis 25]. ║
║INTEGER Spalte, in der der Hinweistext beginnt [1 bis 50]. ║
║INTEGER Spalte, ab der die Antwortzeichen gelesen werden ║
║ [30 bis 79]. ║
║INTEGER Farbattribut; siehe Anhang: "Farbattribute". Wenn ║
║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
║ Darstellung im Schwarz/Weiß-Modus. ║
║ Bit 0 - 2: Vordergrundfarbe ║
║ Bit 3 : Intensität der Vordergrundfarbe ║
║ Bit 4 - 6: Hintergrundfarbe ║
║ Bit 7 : blinken ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: AREADZ,AWRI,UPCASE ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: CHARACTER STRING*10 ║
║ CALL OPTION (STRING,8,10,15,70,23) ║
║ In den String können die Zeichen "A" bis "I" oder ║
║ "a" bis "i" als Auswahlkriterien für 8 bereits am ║
║ Bildschirm vorhandene Optionstexte angegeben werden.║
║ Der Hinweistext wird in Zeile 10 ab Spalte 15 in ║
║ hellgrauer Farbe auf blauem Hintergrund ausgegeben. ║
║ In der gleichen Zeile ab Spalte 70 werden die ║
║ Auswahlkriterien eingelesen. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 44
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine FRAG (ANT,TEXT,ANZ,ZEI,SP,RSP,COL) ║
║Die Subroutine schreibt eine Frage positioniert auf den Bildschirm ║
║und ließt die Antwort "j" oder "n" bzw. "J" oder "N" in eine ║
║Antwortvariable "ANT" ein. Der String " <J/N>" wird an den Fragetext║
║angehängt. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║CHARACTER Antwortvariable [1 Zeichen]; Es sind die Zeichen ║
║ "J", "N", "j", und "n" zugelassen. ║
║CHARACTERSTRING Fragetext [max. 72 Zeichen ]; hinter dem letzten ║
║ zu schreibenden Zeichen kann ein Null-Character als ║
║ Terminator angefügt werden. ║
║INTEGER Anzahl der zu schreibenden Zeichen. Es werden ║
║ soviele Zeichen geschrieben, bis entweder die Anzahl║
║ erreicht ist oder ein Null-Character gefunden wird ║
║ oder die 79. Spalte beschrieben wurde. ║
║INTEGER Zeile in die die Frage geschrieben werden soll. Der ║
║ Wert darf zwischen 1 und 25 liegen. ║
║INTEGER Spalte ab der die Frage geschrieben werden soll. Der║
║ Wert darf zwischen 1 und 79 liegen. ║
║INTEGER Spalte aus der die Antwort gelesen werden soll. Der ║
║ Wert darf zwischen 1 und 79 liegen. ║
║INTEGER Farbattribut; siehe Anhang: "Farbattribute". Wenn ║
║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
║ Ausgabe im Schwarz/Weiß-Modus. ║
║ Bit 0 - 2: Vordergrundfarbe ║
║ Bit 3 : Intensität der Vordergrundfarbe ║
║ Bit 4 - 6: Hintergrundfarbe ║
║ Bit 7 : blinken ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: AREADZ,AWRI,LAENGE,UPCASE ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: CHARACTER ANT*1 ║
║ CALL FRAG (ANT,'Noch einmal?',12,10,20,50,23) ║
║ Die Frage wird in der 10. Zeile ab der 20. Spalte ║
║ mit hellgrauer Farbe auf blauem Hintergrund auf den ║
║ Bildschirm geschrieben. Die Antwort wird aus der 50.║
║ Spalte in die Variable "ANT" gelesen. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 45
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine ZIFRAG (ANT,TEXT,ANZ,ZEI,SP,RSP,COL) ║
║Die Subroutine gibt einen Fragetext der Länge ANZ positioniert auf ║
║den Bildschirm aus und liest in eine Integervariable eine der ║
║zugelassenen Ziffern 0 bis 9 als Antwort ein. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Return: Eine der Ziffern 0 bis 9 als Antwort. ║
║CHARACTERSTRING Fragetext [1 bis 80 Characters]. ║
║INTEGER Anzahl der Zeichen im Fragetext. ║
║INTEGER Zeile in der der Fragetext geschrieben werden soll ║
║ und aus der die Antwort gelesen werden soll ║
║ [1 bis 25]. ║
║INTEGER Spalte, ab der der Fragetext geschrieben werden ║
║ soll [1 bis 79]. ║
║INTEGER Spalte, aus der die Antwort gelesen werden soll ║
║ [1 bis 79]. ║
║INTEGER Farbattribut; siehe Anhang: "Farbattribute". Wenn ║
║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
║ Ausgabe im Schwarz/Weiß-Modus. ║
║ Bit 0 - 2: Vordergrundfarbe ║
║ Bit 3 : Intensität der Vordergrundfarbe ║
║ Bit 4 - 6: Hintergrundfarbe ║
║ Bit 7 : blinken ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: AWRI,IREAD ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: CALL ZIFRAG (I,'Anzahl?',7,10,20,40,23) ║
║ Der Fragetext wird in hellgrauer Farbe auf blauem ║
║ Hintergrund in der 10. Zeile ab Spalte 20 ║
║ geschrieben. Die Antwortziffer wird aus Spalte 40 ║
║ gelesen. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 46
Bildschirmmasken
Bildschirmmasken ermöglichen das Einlesen von Daten beliebigen Formats
in einer vorgegebenen Form. Die Datenfelder einer Bildschirmmaske
werden gewöhnlich in der im Formular vorgegebenen Reihenfolge und Form
auf dem Bildschirm angeordnet. Dabei kann die Form des Formulars mit
Hilfe der Maske am Bildschirm mehr oder weniger originalgetreu
nachgebildet werden. Es besteht die Möglichkeit, die Datentypen
INTEGER, REAL und CHARACTER sowie ein spezielles Datumsformat in der
Bildschirmmaske zu verwenden. Selbstverständlich werden die
entsprechenden Plausibilitätskontrollen direkt während der Dateneingabe
vorgenommen. Innerhalb der Bildschirmmaske ist das Springen zwischen
den Datenfeldern mit den Tasten des Cursorblocks möglich. Eine Maske
wird mit der <Escape>-Taste abgeschlossen. In Verbindung mit
Subroutinen aus dem Kapitel "Fenstertechnik" ist sogar das Vorwärts- und
Rückwärtsblättern zwischen den mit Hilfe von Bildschirmmasken
ausgefüllten elektronisch gespeicherten Seiten möglich.
Subroutinen zur Maskengenerierung
MASTXT a) Text aus einer direct organisierten Datei in Form einer
Bildschirmmaske auf dem Bildschirm positionieren
MASK a) Bildschirmmaske zum Einlesen von Strings, Integerwerten,
Realwerten und Datumsformaten generieren
b) Bildschirmmaske zum Korrigieren von Strings, Integerwerten,
Realwerten und Datumsformaten generieren
TXMASK a) Bildschirmmaske zum Einlesen von Strings generieren
b) Bildschirmmaske zum Korrigieren von Strings generieren
Seite 47
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine MASTXT (ANZ,LAN,ZEI,SP,UNIT,SNR,COL) ║
║Die Subroutine liest aus einer direkt organisierten Datei Texte und ║
║bringt diese positioniert auf den Bildschirm. Die Routine dient ║
║zur Vorbereitung des Maskenfeldes für die Subroutine MASK. ║
║Löschfenster und Rahmen müssen, falls erforderlich, bereits vorhanden║
║sein. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Anzahl der zur benötigten Maskentexte. ║
║INTEGER Feld mit Längen der zu schreibenden Maskentexte ║
║ [1 bis 78]. ║
║INTEGER Feld mit Zeilen in denen die Maskentexte geschrieben║
║ geschrieben werden sollen [1 bis 25] ║
║INTEGER Feld mit Spalten, in denen die Maskentexte beginnen ║
║ sollen [1 bis 79] ║
║INTEGER Unit der direkt organisierten Datei, aus der die ║
║ Maskentexte gelesen werden sollen. ║
║INTEGER Satznummer des ersten Maskentextes in der direkt ║
║ organisierten Datei. ║
║INTEGER Farbattribut; siehe Anhang: "Farbattribute". Wenn ║
║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
║ Ausgabe im Schwarz/Weiß-Modus. ║
║ Bit 0 - 2: Vordergrundfarbe ║
║ Bit 3 : Intensität der Vordergrundfarbe ║
║ Bit 4 - 6: Hintergrundfarbe ║
║ Bit 7 : blinken ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: AWRI ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: INTEGER LAN(6),ZEI(6),SP(6) ║
║ DATA ZEI /3,5,7,9,11,13/, SP /4,9,35,2,4,40/ ║
║ DATA LAN /10,15,18,9,25,60/ ║
║Beispiel: CALL MASTXT (6,LAN,ZEI,SP,10,200,23) ║
║ Die Subroutine liest aus der Datei mit dem Unit 10 ║
║ sechs Zeilen Text ab der Recordnummer 200. ║
║ Die Texte werden mit den Zeilen- und Spaltenangaben ║
║ aus den Feldern ZEI und SP positioniert auf den ║
║ Bildschirm gebracht. Die Farbe der Texte ist ║
║ hellgrau auf blauem Hintergrund. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 48
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine ║
║MASK (ART,ADDR,FORM,ZEI,SP,AUF,AB,KON,ANZ,MZEI,MSP,COL,FLAG) ║
║Die Subroutine stellt auf dem Bildschirm positionierte Felder der ║
║verschiedenen Datentypen in Form einer Maske zur Verfügung. Es ist ║
║möglich Texte, Integer- und Realwerte und Datumsformate einzulesen ║
║und/oder cursorgesteuert zu ändern. Mit Hilfe der Cursor- und ║
║Tabulatortasten und der Bild-aufwärts und Bild-abwärts-Tasten wird ║
║das Springen zwischen den Feldern der Maske möglich. Zum Beenden der ║
║Maskeneingabe können wahlweise die Tasten Bild-aufwärts und Bild- ║
║abwärts, die Escape-Taste oder die Funktionstasten 1 bis 10 gewählt ║
║werden. In der "MZEI" ab der Spalte "MSP" werden dem Benutzer die zur║
║Verfügung stehenden Tasten erklärt. Zum Beschreiben und Ändern der ║
║Maskenfelder können alle Tasten des Cursorblocks benutzt werden. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGERFELD Feld mit Kennziffern für das Datenformat der zur ║
║ Verwendung kommenden Maskenfelder [ ART(ANZ) ]. ║
║ 1: Integer ║
║ 2: Real ║
║ 3: Characterstring ║
║ 4: Datumsformat ║
║ Beim Datumsformat wird ein Datum als Integervariable║
║ der Form JJJJMMTT übergeben und zurückgegeben. Die ║
║ Bildschirmdarstellung erfolgt in der Form ║
║ TT.MM.JJJJ. Es werden nur plausible Daten ║
║ übernommen. Integer- und Realwerte werden am ║
║ Bildschirm mit führenden Nullen dargestellt. Der ║
║ Dezimalpunkt in der Realdarstellung dient zur ║
║ Kennzeichnug des Real-Formates. ║
║INTEGERFELD Feld mit Maschinenadressen der zu den Maskenfeldern ║
║ gehörenden Variablen [ ADDR(ANZ) ]. ║
║ Die Adressen werden mit der Integer-Funktion LOC ║
║ ermittelt [ z.B.: ADDR(1)=LOC(Variable) ]. ║
║INTEGERFELD Feld mit Formatangaben der aus den Maskenfeldern ║
║ zu lesenden oder zu korrigierenden Werte ║
║ [ FORM(ANZ) ]. ║
║ Integer: 1 bis 11 ║
║ Real: 10 bis 209 ║
║ (Fortran-Format mit 10 multipliziert, ║
║ z.B. 104 entspricht 5 Vorkommastellen ║
║ - und 4 Nachkommastellen). ║
║ Character: 1 bis 79 ║
║ Datum: Wert ohne Bedeutung, da die Feldlänge ║
║ automatisch immer 10 ist. ║
║INTEGERFELD Feld mit Zeilen, in denen sich die jeweiligen ║
║ Maskenfelder befinden [ ZEI(ANZ) ]. ║
║ Die Zeilennummern dürfen zwischen 1 und 24 liegen, ║
║ es ist aber zu beachten, daß in Zeile 24 der ║
║ Hinweistext über die Tastenbelegung erscheint. ║
║INTEGERFELD Feld mit Spalten, in denen die jeweiligen Masken- ║
║ felder beginnen [ SP(ANZ) ]. ║
║ Die Spaltennummern dürfen zwischen 1 und 79 liegen. ║
║INTEGERFELD Feld mit Nummern der Maskenfelder, die angesprungen ║
║ werden, wenn das Maskenfeld mit der Cursor-aufwärts-║
Seite 49
║ Taste verlassen wird. [ AUF(ANZ) ]. ║
║INTEGERFELD Feld mit Nummern der Maskenfelder, die angesprungen ║
║ werden, wenn das Maskenfeld mit der Cursor-abwärts- ║
║ Taste verlassen wird. [ AB(ANZ) ]. ║
║INTEGERFELD Feld mit Flags, die angeben, ob ein Wert neu ║
║ eingelesen oder korrigiert werden soll. ║
║ 0: Wert einlesen ║
║ 1: Wert korrigieren ║
║ Return: Feld mit Flags, die angeben, ob das Werte- ║
║ feld leer ist, oder ob ein Wert übernommen wurde. ║
║ 0: kein Wert im Wertefeld ║
║ 1: Wert übernommen ║
║INTEGER Anzahl der Maskenfelder. ║
║INTEGER Zeile in der die Tastenbelegung für die Beendigung ║
║ der Maske beschrieben wird oder Null, wenn keine ║
║ Meldung ausgegeben werden soll. Die Meldung ist 54 ║
║ Zeichen lang, wenn "FLAG" größer/gleich 1024 ist, ║
║ sonst nur 49 Zeichen. ║
║INTEGER Spalte ab der die Tastenbelegung für die Beendigung ║
║ der Maske beschrieben wird oder Null, wenn keine ║
║ Meldung ausgegeben werden soll oder 100, wenn die ║
║ Meldung mittenzentriert ausgegeben werden soll. Die ║
║ Meldung ist 54 Zeichen lang, wenn "FLAG" größer/ ║
║ gleich 1024 ist, sonst nur 49 Zeichen. ║
║INTEGER Farbattribut; Siehe Anhang: "Farbattribute". Wenn ║
║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
║ Ausgabe im Schwarz/weiß-Modus. ║
║ Bit 0 - 2: Vordergrundfarbe ║
║ Bit 3 : Intensität der Vordergundfarbe ║
║ Bit 4 - 6: Hintergrundfarbe ║
║ Bit 7 : blinken ║
║INTEGER Bitmuster für Abschlußtasten zum Beenden der ║
║ Eingabe bzw. Korrektur in einer Maske: ║
║ 32: <Bild-aufwärts>-Taste ║
║ 64: <Bild-abwärts>-Taste ║
║ 512: <Escape>-Taste ║
║ 1024: <F1>-Taste ║
║ 2048: <F2>-Taste ║
║ 4096: <F3>-Taste ║
║ 8192: <F4>-Taste ║
║ 16384: <F5>-Taste ║
║ 32768: <F6>-Taste ║
║ 65536: <F7>-Taste ║
║ 131072: <F8>-Taste ║
║ 262144: <F9>-Taste ║
║ 524288: <F10>-Taste ║
║ Die Abschlußtasten können durch Addition miteinander║
║ verknüpft werden. Wenn die Bild-aufwärts- und ║
║ Bild-abwärts-Tasten nicht gewählt sind, wird bei ║
║ deren Benutzung zum ersten bzw. letzten Maskenfeld ║
║ gesprungen. ║
║ Return: Bitmuster der Abschlußtaste ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: ADRESS,AREAD,AWRI,DREAD,IREAD,LAENGE,PEEK,POKE,RREAD║
╟─────────────────────────────────────────────────────────────────────╢
Seite 50
║Beispiel: INTEGER ADDR(4),ART(4),FORM(4),ZEI(4),SP(4),AUF(4), ║
║ -AB(4),KON(4),IWERT,DATUM ║
║ REAL RWERT ║
║ CHARACTER TEXT*30 ║
║ DATA ART /1,2,3,4/, FORM /5,84,30,0/ ║
║ DATA ZEI /3,3,4,4/, SP /5,40,5,40/ ║
║ DATA AUF /0,3,1,2/, AB /3,4,2,0/ ║
║ DATA KON /0,0,0,0/ ║
║ ADDR(1)=LOC(IWERT) ║
║ ADDR(2)=LOC(RWERT) ║
║ ADDR(3)=LOC(TEXT) ║
║ ADDR(4)=LOC(DATUM) ║
║ CALL MASK ║
║ -(ART,ADDR,FORM,ZEI,SP,AUF,AB,KON,4,24,15,23,608) ║
║ In den Zeilen 3 und 4 wird eine Bildschirmmaske ║
║ zur Verfügung gestellt, die es ermöglicht je einen ║
║ Integer- und Realwert, einen Text und einen Datums- ║
║ string zu bearbeiten. In Zeile 24 werden die zur ║
║ Verfügung stehenden Tasten erklärt. Die Maske kann ║
║ durch die Escapetaste und durch die Bild-aufwärts- ║
║ und Bild-abwärts-Tasten abgeschlossen werden. Die ║
║ eingegebenen Werte werden mit hellgrauer Farbe auf ║
║ blauem Hintergrund dargestellt. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 51
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine ║
║TXMASK (FELD,LAN,ZEI,SP,AUF,AB,KON,ANZ,MZEI,MSP,COL,FLAG) ║
║Die Subroutine stellt auf dem Bildschirm positionierte Felder des ║
║Datentyps CHARACTER in Form einer Maske zur Verfügung. Es ist ║
║möglich, Texte einzulesen und/oder cursorgesteuert zu ändern. Mit ║
║Hilfe der Cursor- und Tabulatortasten und der Bild-aufwärts und ║
║Bild-abwärts-Tasten wird das Springen zwischen den Feldern der Maske ║
║möglich. Zum Beenden der Maskeneingabe können wahlweise die Tasten ║
║Bild-aufwärts und Bild-abwärts, die Escape-Taste oder die ║
║Funktionstasten 1 bis 5 gewählt werden. In der Zeile "MZEI" ab der ║
║Spalte "MSP" werden dem Benutzer die zur Verfügung stehenden Tastenn ║
║erklärt. Zum Beschreiben und Ändern der Maskenfelder können alle ║
║Tasten des Cursorblocks benutzt werden. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║CHARACTERFELD Feld für einzulesende oder zu ändernde Texte. ║
║ Return: Eingelesene bzw. geänderte Texte. ║
║ [ FELD(ANZ)*(*) ]. ║
║INTEGERFELD Feld mit Längenangaben der aus den Maskenfeldern ║
║ zu lesenden oder zu korrigierenden Texte. ║
║ [ LAN(ANZ) ] (1 bis 79) ║
║INTEGERFELD Feld mit Zeilen, in denen sich die jeweiligen ║
║ Maskenfelder befinden [ ZEI(ANZ) ]. ║
║ Die Zeilennummern dürfen zwischen 1 und 24 liegen, ║
║ es ist aber zu beachten, daß in Zeile 24 der ║
║ Hinweistext über die Tastenbelegung erscheint. ║
║INTEGERFELD Feld mit Spalten, in denen die jeweiligen Masken- ║
║ felder beginnen [ SP(ANZ) ]. ║
║ Die Spaltennummern dürfen zwischen 1 und 79 liegen. ║
║INTEGERFELD Feld mit Nummern der Maskenfelder, die angesprungen ║
║ werden, wenn das Maskenfeld mit der Cursor-aufwärts-║
║ Taste verlassen wird. [ AUF(ANZ) ]. ║
║INTEGERFELD Feld mit Nummern der Maskenfelder, die angesprungen ║
║ werden, wenn das Maskenfeld mit der Cursor-abwärts- ║
║ Taste verlassen wird. [ AB(ANZ) ]. ║
║INTEGERFELD Feld mit Flags, die angeben, ob ein Text neu ║
║ eingelesen oder korrigiert werden soll. ║
║ 0: Text einlesen ║
║ 1: Text korrigieren ║
║ Return: Feld mit Flags, die angeben, ob das Masken- ║
║ feld leer ist, oder ob ein Text übernommen wurde. ║
║ 0: kein Wert im Maskenfeld ║
║ 1: Text übernommen ║
║INTEGER Anzahl der Maskenfelder. ║
║INTEGER Zeile in der die Tastenbelegung für die Beendigung ║
║ der Maske beschrieben wird oder Null, wenn keine ║
║ Meldung ausgegeben werden soll. Die Meldung ist 54 ║
║ Zeichen lang, wenn "FLAG" größer/gleich 1024 ist, ║
║ sonst nur 49 Zeichen. ║
║INTEGER Spalte ab der die Tastenbelegung für die Beendigung ║
║ der Maske beschrieben wird oder Null, wenn keine ║
║ Meldung ausgegeben werden soll oder 100, wenn die ║
║ Meldung mittenzentriert ausgegeben werden soll. Die ║
║ Meldung ist 54 Zeichen lang, wenn "FLAG" größer/ ║
Seite 52
║ gleich 1024 ist, sonst nur 49 Zeichen. ║
║INTEGER Farbattribut; Siehe Anhang: "Farbattribute". Wenn ║
║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
║ Ausgabe im Schwarz/weiß-Modus. ║
║ Bit 0 - 2: Vordergrundfarbe ║
║ Bit 3 : Intensität der Vordergundfarbe ║
║ Bit 4 - 6: Hintergrundfarbe ║
║ Bit 7 : blinken ║
║INTEGER Bitmuster für Abschlußtasten zum Beenden der ║
║ Eingabe bzw. Korrektur in einer Maske: ║
║ 32: <Bild-aufwärts>-Taste ║
║ 64: <Bild-abwärts>-Taste ║
║ 512: <Escape>-Taste ║
║ 1024: <F1>-Taste ║
║ 2048: <F2>-Taste ║
║ 4096: <F3>-Taste ║
║ 8192: <F4>-Taste ║
║ 16384: <F5>-Taste ║
║ Die Abschlußtasten können durch Addition miteinander║
║ verknüpft werden. Wenn die Bild-aufwärts- und ║
║ Bild-abwärts-Tasten nicht gewählt sind, wird bei ║
║ deren Benutzung zum ersten bzw. letzten Maskenfeld ║
║ gesprungen. ║
║ Return: Bitmuster der Abschlußtaste ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: AREAD,AWRI,LAENGE ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: INTEGER LAN(4),ZEI(4),SP(4),AUF(4),AB(4),KON(4) ║
║ CHARACTER TEXT(4)*30 ║
║ DATA LAN /30,20,8,10/, ZEI /3,3,4,4/, SP /5,40,5,40/║
║ DATA AUF /0,3,1,2/, AB /3,4,2,0/, KON /4*0/ ║
║ CALL TXMASK ║
║ -(TEXT,LAN,ZEI,SP,AUF,AB,KON,4,24,15,23,608) ║
║ In den Zeilen 3 und 4 wird eine Bildschirmmaske ║
║ zur Verfügung gestellt, die das Einlesen von vier ║
║ Textstrings erlaubt. In Zeile 24 werden die zur ║
║ Verfügung stehenden Tasten erklärt. Die Maske kann ║
║ durch die Escapetaste und durch die Bild-aufwärts- ║
║ und Bild-abwärts-Tasten abgeschlossen werden. Die ║
║ eingegebenen Werte werden mit hellgrauer Farbe auf ║
║ blauem Hintergrund dargestellt. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 53
Fenstertechnik
Mit Fenstertechnik wird ein Verfahren bezeichnet, das es ermöglicht,
Aktionen am Bildschirm mit Hilfe verschiedener Fenster durchzuführen,
die im Arbeitspeicher vorgehalten werden können und so für spätere
Aktionen zur Verfügung stehen. Mit den in FORSUB.LIB enthaltenen
Subroutinen zur hirachischen Fenstertechnik können Menüs, Texte und
Datenfelder erzeugt, verwaltet und gespeichert werden.
Die Subroutinen allokieren automatisch den für die Fenster benötigten
Speicherbereich im Arbeitspeicher. Wenn im Arbeitsspeicher nicht mehr
genügend Speicherplatz vorhanden ist, wird eine temporäre, direct
organisierte Datei eröffnet. Die dort abgelegten Fenster stehen
unabhängig von der Größe des noch freien Arbeitsspeichers zur Verfügung.
Jeweils bis zu dreißig Bildschirmfenster können mit Hilfe eines
Verwaltungsfeldes verwaltet werden. Jede Fensterroutine benötigt eine
Nummer zwischen eins und dreißig für das Fenster und die Adresse des
Verwaltungsfeldes. Die Adresse des Verwaltungsfeldes wird automatisch
ermittelt, wenn beim Ablegen eines Bildschirmfensters in den
Arbeitsspeicher noch keine Adresse für das Verwaltungsfeld vorhanden
ist. Es wird von den Fensterroutinen jeweils aktualisiert. Der
Programmierer muß sich nicht mit dem Verwaltungsfeld aufhalten, da alle
Aktualisierungen absolut im Hintergrund ablaufen. Selbstverständlich
ist es möglich, mehrere Verwaltungsfelder zu erzeugen und so mehr als
dreißig Bildschirmfenster zu speichern.
Die Nummer des Bildschirmfensters gibt die Priorität an, mit der es am
Bildschirm dargestellt wird. Fenster mit höheren Fensternummern
überdecken Fenster mit niedrigeren Fensternummern. Viele Subroutinen
stellen das gerade zu bearbeitende Fenster vorübergehend mit der
höchsten Priorität am Bildschirm dar, um es nach Abschluß der
Bearbeitung an die ursprüngliche Position zurückzustellen.
Subroutinen zur Fenstertechnik
PUTFEN a) Bildschirmausschnitt als Fenster im Arbeitsspeicher ablegen
MAKFEN a) Characterfeld als Fenster im Arbeitsspeicher ablegen
TEXFEN a) Text aus einer direct organisierten Datei als Fenster im
Arbeitsspeicher ablegen
b) Text aus einer direct organisierten Datei mehrspaltig in
einem Fenster ablegen
GETFEN a) Fenster aus dem Arbeitsspeicher holen und auf dem Bildschirm
positionieren
PRIFEN a) Priorität zweier Bildschirmfenster austauschen
MOVFEN a) Fenster mit Hilfe der Cursortasten über den Bildschirm
bewegen
MOPFEN a) Position eines Fensters auf dem Bildschirm verändern
GROFEN a) Größe eines Fensters mit Hilfe der Cursortasten verändern
GRPFEN a) Größe eines Fensters auf dem Bildschirm verändern
LOSFEN a) Inhalt eines Fensters löschen
RAMFEN a) Fenster umrahmen und im oberen und unteren Rahmenteil mit
Meldungen versehen
WRIFEN a) Fenster von der Tastatur aus mit Text beschreiben
Seite 54
ME1FEN a) Einfache Menüauswahl in einem Fenster
MEMFEN a) Mehrfache Menüauswahl in einem Fenster
VERFEN a) Mehrere Fenster mit Hilfe eines Verwaltungsfensters am
Bildschirm verwalten
CLOFEN a) Fenster vom Bildschirm entfernen
FREFEN a) Fenster aus dem Arbeitsspeicher entfernen
INFFEN a) Informationen über ein Fenster abfragen
Seite 55
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine PUTFEN (NR,H,B,ZEI,SP,VSEG,FLAG) ║
║Die Subroutine kopiert ein definiertes Fenster vom Bildschirm in die ║
║Memory. Wenn keine Memory mehr verfügbar ist, wird das Bildschirm- ║
║fenster in einer temporären Datei abgelegt. Informationen über die ║
║Ausmaße des Bildschirmfensters und über die Adresse an der es ║
║gespeichert ist, werden automatisch in einem Verwaltungsfeld, das ║
║sich ebenfalls in der Memory befindet, abgelegt. Das Verwaltungsfeld ║
║wird angelegt, wenn in der Variablen "VSEG" eine Null an die ║
║Subroutine übergeben wird. In "VSEG" wird die Adresse des ║
║Verwaltungsfeldes an das rufende Programm zurückgegeben. Sie wird ║
║für alle zukünftigen Zugriffe auf Fenster mit Hilfe der Fenster- ║
║routinen benötigt. Die Nummer des abzulegenden Bildschirmfensters ║
║wird in der Variablen "NR" übergeben. Sie kann zum Aufbau einer ║
║hirarchischen Struktur der Bildschirmfenster benutzt werden. Es ║
║können mehrere Verwaltungsfelder nebeneinander benutzt werden, so daß║
║insgesamt mehr als 30 Bildschirmfenster in der Memory bzw. in einem ║
║temporären File abgelegt werden können. Wenn diese Subroutine von ║
║einem Programm genutzt wird, darf keine Datei mit dem Unit 100 ║
║eröffnet werden, da das Unit für die temporäre Datei benötigt wird. ║
║Bei erfolgreicher Beendigung der Subroutine steht in "FLAG" eine ║
║Null, sonst eine Eins. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Nummer des in der Memory abzulegenden Bildschirm- ║
║ fensters [ 1 bis 30 ]. Wenn die Nummer schon ║
║ durch ein anderes Bildschirmfenster belegt ist, ║
║ wird die Routine mit "FLAG" gleich Eins abgebrochen.║
║ Durch die Nummer wird die Hirarchie der Bildschirm- ║
║ fenster festgelegt. ║
║INTEGER Höhe des Bildschirmfensters in Zeilen [ 1 bis 25 ]. ║
║INTEGER Breite des Bildschirmfensters in Spalten ║
║ [ 1 bis 80 ]. ║
║INTEGER Zeile in der das Bildschirmfenster beginnt ║
║ [ 1 bis 25 ]. ║
║INTEGER Spalte, in der das Bildschirmfenster beginnt ║
║ [ 1 bis 80 ]. ║
║INTEGER Zum Anlegen des Verwaltungsfeldes wird eine Null ║
║ an die Routine übergeben. ║
║ Return: Adresse des Verwaltungsfeldes. Sie ist ║
║ positiv, wenn das Verwaltungsfeld in der Memory ║
║ abgelegt ist und negativ, wenn es in einer ║
║ temporären Datei abgelegt ist. ║
║INTEGER Return: Fehlerflag ║
║ 0: Subroutine erfolgreich abgeschlossen. ║
║ 1: Ein Fehler ist aufgetreten. ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: CREMEM,GETMEM,PUTMEM,SCREEN ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: INTEGER H,B,ZEI,SP,VSEG,COL ║
║ DATA H/10/,B/20/,ZEI/1/,SP/1/,VSEG/0/,COL/23/ ║
║ CALL LOES (H,B,ZEI,SP,32,COL,0) ║
║ CALL RAHM (H,B,ZEI,SP,0,COL,0) ║
║ CALL PUTFEN (3,H,B,ZEI,SP,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
Seite 56
║ CALL GETFEN (3,11,40,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL CLOFEN (3,VSEG,COL,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL FREFEN (3,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ RETURN ║
║ 1 WRITE(*,'(1X,A)') 'Fehler!' ║
║ Mit den Subroutinen "LOES" und "RAHM" wird ein ║
║ Bildschirmfenster aufgebaut, das mit der Subroutine ║
║ "PUTFEN" in die Memory bzw. in einen temporären ║
║ File ausgelagert wird. Mit der Subrouteine "GETFEN" ║
║ wird das gespeicherte Fenster an eine andere ║
║ Position des Bildschirms zurückgeschrieben. Die ║
║ Subroutine "CLOFEN" löscht den das Fenster ║
║ einnehmenden Bildschirmbereich mit dem Farbattribut ║
║ "COL" bzw stellt dort vorhandene Fenster wieder her.║
║ Die Subroutine "FREFEN" gibt den für das Fenster ║
║ allokierten Speicherbereich bzw. Filebereich wieder ║
║ frei. Beim Auftreten eines Fehlers wird eine ║
║ Meldung ausgegeben. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 57
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine MAKFEN (NR,FELD,H,B,VSEG,COL,FLAG) ║
║Die Subroutine kopiert ein in einem zweidimensionalen Characterfeld ║
║angelegtes Bildschirmfenster mit der Hintergrundfarbe "COL" in die ║
║Memory. Wenn keine Memory mehr verfügbar ist, wird das Bildschirm- ║
║fenster in einer temporären Datei abgelegt. Informationen über die ║
║Ausmaße des Bildschirmfensters und über die Adresse an der es ║
║gespeichert ist, werden automatisch in einem Verwaltungsfeld, das ║
║sich ebenfalls in der Memory befindet, abgelegt. Das Verwaltungsfeld ║
║wird angelegt, wenn in der Variablen "VSEG" eine Null an die ║
║Subroutine übergeben wird. In "VSEG" wird die Adresse des ║
║Verwaltungsfeldes an das rufende Programm zurückgegeben. Sie wird ║
║für alle zukünftigen Zugriffe auf bis zu 30 im Verwaltungsfeld ║
║definierte Fenster durch Fensterroutinen benötigt. Die Nummer des ║
║abzulegenden Fensters wird in der Variablen "NR" übergeben. Sie kann ║
║zum Aufbau einer hirarchischen Struktur der Bildschirmfenster benutzt║
║werden. Es können mehrere Verwaltungsfelder nebeneinander benutzt ║
║werden, so daß insgesamt mehr als 30 Bildschirmfenster in der Memory ║
║bzw. temporären File abgelegt werden können. Wenn diese Subroutine ║
║von einem Programm genutzt wird, darf keine Datei mit dem Unit 100 ║
║eröffnet werden, da das Unit für die temporäre Datei benötigt wird. ║
║Bei erfolgreicher Beendigung der Subroutine steht in "FLAG" eine ║
║Null, sonst eine Eins. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Nummer des in der Memory abzulegenden Bildschirm- ║
║ fensters [ 1 bis 30 ]. Wenn die Nummer schon ║
║ durch ein anderes Bildschirmfenster belegt ist, ║
║ wird die Routine mit "FLAG" gleich Eins abgebrochen.║
║ Durch die Nummer wird die Hirarchie der Bildschirm- ║
║ fenster festgelegt. ║
║CHARACTERFELD Characterfeld dessen Inhalt als Bildschirmfenster ║
║ abgelegt werden soll. [ FELD(H)*B ]. ║
║INTEGER Höhe des Bildschirmfensters in Zeilen [ 1 bis 25 ]. ║
║INTEGER Breite des Bildschirmfensters in Spalten ║
║ [ 1 bis 80 ]. ║
║INTEGER Zum Anlegen des Verwaltungsfeldes wird eine Null ║
║ an die Routine übergeben. ║
║ Return: Adresse des Verwaltungsfeldes. Sie ist ║
║ positiv, wenn das Verwaltungsfeld in der Memory ║
║ abgelegt ist und negativ, wenn es in einer ║
║ temporären Datei abgelegt ist. ║
║INTEGER Farbattribut; siehe Anhang: "Farbattribute". Wenn ║
║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
║ Ausgabe im Schwarz/Weiß-Modus. ║
║ Bit 0 - 2: Vordergrundfarbe ║
║ Bit 3 : Intensität der Vordergrundfarbe ║
║ Bit 4 - 6: Hintergrundfarbe ║
║ Bit 7 : blinken ║
║INTEGER Return: Fehlerflag ║
║ 0: Subroutine erfolgreich abgeschlossen. ║
║ 1: Ein Fehler ist aufgetreten. ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: ATTRIB,CREMEM,GETMEM,PUTMEM ║
╟─────────────────────────────────────────────────────────────────────╢
Seite 58
║Beispiel: INTEGER H,B,ZEI,SP,VSEG,COL ║
║ CHARACTER FELD(2)*30 ║
║ DATA H/2/,B/30/,ZEI/11/,SP/40/,VSEG/0/,COL/23/ ║
║ FELD(1)='TESTTEXT FÜR DIE' ║
║ FELD(2)='SUBROUTINE MAKFEN' ║
║ CALL MAKFEN (3,FELD,H,B,COL,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL GETFEN (3,11,40,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL CLOFEN (3,VSEG,COL,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL FREFEN (3,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ RETURN ║
║ 1 WRITE(*,'(1X,A)') 'Fehler!' ║
║ Mit der Subroutine "MAKFEN" wird ein in "FELD" ║
║ abgelegter Text mit dem Farbattribut "COL" als ║
║ Bildschirmfenster in die Memory bzw. in einen ║
║ temporären File ausgelagert. Mit der Subrouteine ║
║ "GETFEN" wird das gespeicherte Fenster anschließend ║
║ positioniert auf den Bildschirms geschrieben. Die ║
║ Subroutine "CLOFEN" löscht den das Fenster ║
║ einnehmenden Bildschirmbereich mit dem Farbattribut ║
║ "COL" bzw stellt dort vorhandene Fenster wieder her.║
║ Die Subroutine "FREFEN" gibt den für das Fenster ║
║ allokierten Speicherbereich bzw. Filebereich wieder ║
║ frei. Beim Auftreten eines Fehlers wird eine ║
║ Meldung ausgegeben. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 59
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine ║
║TEXFEN (NR,ANZ,SPZ,LANG,UNIT,SNR,COL,VSEG,FLAG) ║
║Die Subroutine liest aus einer direct organisierten Datei mit dem ║
║Unit "UNIT" ab der Satznummer "SNR" eine Anzahl "ANZ" Characterstings║
║ein. Die Characterstrings werden "SPZ"-spaltig mit der jeweiligen ║
║Länge "LAN" und dem Farbattribut "COL" einem Fenster mit der Nummer ║
║"NR" zugeordnet. Die Ausmaße des Fensters werden automatisch ║
║ermittelt. Das Fenster darf noch nicht vorhanden sein. Die Subroutine║
║eignet sich als Vorbereitung für die Routinen "ME1FEN" und "MENFEN". ║
║Informationen über die Ausmaße des Bildschirmfensters und über die ║
║Adresse an der es gespeichert ist, werden automatisch in einem ║
║Verwaltungsfeld, das sich ebenfalls in der Memory befindet, abgelegt.║
║Die Adresse des Verwaltungsfeldes wird in "VSEG" übergeben. Um ein ║
║neues Verwaltungsfeld anzulegen, muß in "VSEG" eine Null übergeben ║
║werden. Die Adresse wird für alle Zugriffe auf bis zu 30 im ║
║Verwaltungsfeld definierte Fenster benötigt. Die Nummer des mit Text ║
║zu belegenden Bildschirmfensters stellt die Priorität gegenüber ║
║anderen Fensters dar. Sie wird in der Variablen "NR" übergeben. ║
║Wenn diese Subroutine benutzt wird, darf das Dateiunit 100 vom ║
║rufenden Programm nicht verwendet werden. Bei erfolgreicher ║
║Beendigung der Routine steht in "FLAG" eine Null, sonst eine Eins. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Nummer des mit Texten zu beschreibenden Bildschirm- ║
║ fensters [ 1 bis 30 ]. Wenn die Nummer bereits ║
║ durch ein Bildschirmfenster belegt ist, wird die ║
║ Routine mit "FLAG" gleich Eins abgebrochen. ║
║ Durch die Nummer ist die Hirarchie der Bildschirm- ║
║ fenster festgelegt. ║
║INTEGER Anzahl der gewünschten Textfelder. ║
║INTEGER Anzahl der nebeneinander angeordneten Textfelder im ║
║ Bildschirmfenster. ║
║INTEGER Länge der im Fenster abzulegenden Texte. ║
║INTEGER Unitnummer der direct organisierten Datei, aus der ║
║ die Texte gelesen werden sollen. ║
║INTEGER Satznummer in der direct organisierten Datei, ab der║
║ der Text abgelegt ist. ║
║INTEGER Farbattribut; siehe Anhang: "Farbattribute". Wenn ║
║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
║ Ausgabe im Schwarz/Weiß-Modus. ║
║ Bit 0 - 2: Vordergrundfarbe ║
║ Bit 3 : Intensität der Vordergrundfarbe ║
║ Bit 4 - 6: Hintergrundfarbe ║
║ Bit 7 : blinken ║
║INTEGER Adresse des Verwaltungsfeldes oder 0 zum Anlegen ║
║ eines neuen Verwaltungsfeldes. ║
║ Return: bei Eingabe einer 0: Adresse des ║
║ Verwaltungsfeldes. ║
║INTEGER Return: Fehlerflag ║
║ 0: Subroutine erfolgreich abgeschlossen. ║
║ 1: Ein Fehler ist aufgetreten. ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: ATTRIB,CREMEM,GETMEM,PUTMEM ║
╟─────────────────────────────────────────────────────────────────────╢
Seite 60
║Beispiel: INTEGER FELD(12),VSEG ║
║ OPEN (1,FILE='TEST',ACCESS='DIRECT', ║
║ -FORM='FORMATTED',RECL=72,STATUS='OLD') ║
║ CALL TEXFEN (2,12,3,20,1,1,23,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL RAMFEN (2,1,0,'Auswählen: <Esc>','NUM',VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL GETFEN (2,5,10,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL ME1FEN (2,12,3,FELD,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ RETURN ║
║ 1 WRITE(*,'(1X,A)') 'FEHLER' ║
║ Aus einer direct orgsanisierten Datei mit dem Unit 1║
║ werden mit Hilfe der Subroutine "TEXFEN" 12 Menü- ║
║ texte dreispaltig mit einer jeweiligen Länge von ║
║ 20 Characters und dem Farbattribut 23 im Fenster ║
║ Nummer 2 abgelegt. ║
║ Die Subroutine "RAMFEN" umgibt das Menüfeld im ║
║ Fenster mit einen einfachen Rahmen und schreibt in ║
║ die erste Zeile des Fensters eine Meldung. In die ║
║ letzte Zeile des Fensters wird außerdem die Nummer ║
║ des Fensters eingeblendet. Rahmen und Texte werden ║
║ in der vorhandenen Farbe dargestellt. ║
║ Die Subroutine "GETFEN" öffnet das Fenster mit dem ║
║ Menütext am Bildschirm ab der 5. Zeile und der 10. ║
║ Spalte. ║
║ "ME1FEN" ermöglicht die Auswahl eines einzelnen ║
║ Menüpunktes mit Hilfe der Cursortasten und der ║
║ <Escape>-Taste. Das der Auswahl entsprechende ║
║ Äquivalent in "FELD" wird dadurch ungleich Null ║
║ gesetzt. Es ist zu beachten, daß die Anzahl der ║
║ Menüpunkte und die Menüspaltenzahl in den Routinen ║
║ "TEXFEN" und "ME1FEN" übereinstimmen. ║
║ Wenn in einer Subroutine ein Fehler auftritt, wird ║
║ eine Fehlermeldung ausgegeben. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 61
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine GETFEN (NR,ZEI,SP,VSEG,FLAG) ║
║Die Subroutine kopiert ein in der Memory oder in einem temporären ║
║File abgelegtes Bildschirmfenster an die durch "ZEI" und "SP" ║
║definierte Position auf den Bildschirm. Informationen über die ║
║Ausmaße des Bildschirmfensters und über die Adresse an der es ║
║gespeichert ist, werden automatisch aus einem Verwaltungsfeld, das ║
║sich ebenfalls in der Memory befindet, gelesen. In "VSEG" wird die ║
║Adresse des Verwaltungsfeldes, das vorher mit Hilfe anderer Fenster- ║
║routinen angelegt worden ist, übergeben. Die Adresse wird für alle ║
║zukünftigen Zugriffe auf bis zu 30 im Verwaltungsfeld definierte ║
║Fenster benötigt. Die Nummer des darzustellenden Bildschirmfensters ║
║stellt die Priorität gegenüber anderen Fensters dar. Sie wird in der ║
║Variablen "NR" übergeben. Die Position des auf dem Bildschirm ║
║dargestellten Fensters wird im Verwaltungsfeld aktualisiert. Auf dem ║
║Bildschirm vorhandene Fenster werden von der Routine ihrer in "NR" ║
║vergebenen Priorität entsprechend berücksichtigt. Bei erfolgreicher ║
║Beendigung der Subroutine ist in "FLAG" eine Null, sonst eine Eins. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Nummer des aus der Memory auszulesenden Bildschirm- ║
║ fensters [ 1 bis 30 ]. Wenn die Nummer noch nicht ║
║ durch ein Bildschirmfenster belegt ist, wird die ║
║ Routine mit "FLAG" gleich Eins abgebrochen. ║
║ Durch die Nummer ist die Hirarchie der Bildschirm- ║
║ fenster festgelegt. ║
║INTEGER Zeile ab der das Bildschirmfenster dargestellt ║
║ werden soll [ 1 bis 25 ]. ║
║INTEGER Spalte, ab der das Bildschirmfenster dargestellt ║
║ werden soll [ 1 bis 80 ]. ║
║INTEGER Adresse des Verwaltungsfeldes. ║
║INTEGER Return: Fehlerflag ║
║ 0: Subroutine erfolgreich abgeschlossen. ║
║ 1: Ein Fehler ist aufgetreten. ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: GETMEM,PUTMEM,SCREEN ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: INTEGER H,B,ZEI,SP,VSEG,COL ║
║ DATA H/10/,B/20/,ZEI/1/,SP/1/,VSEG/0/,COL/23/ ║
║ CALL LOES (H,B,ZEI,SP,32,COL,0) ║
║ CALL RAHM (H,B,ZEI,SP,0,COL,0) ║
║ CALL PUTFEN (3,H,B,ZEI,SP,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL GETFEN (3,11,40,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL CLOFEN (3,VSEG,COL,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL FREFEN (3,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ RETURN ║
║ 1 WRITE(*,'(1X,A)') 'Fehler!' ║
║ Mit den Subroutinen "LOES" und "RAHM" wird ein ║
║ Bildschirmfenster aufgebaut, das mit der Subroutine ║
║ "PUTFEN" in die Memory bzw. in einen temporären ║
║ File ausgelagert wird. Mit der Subroutine "GETFEN" ║
Seite 62
║ wird das gespeicherte Fenster an eine andere ║
║ Position des Bildschirms zurückgeschrieben. Die ║
║ Subroutine "CLOFEN" löscht den das Fenster ║
║ einnehmenden Bildschirmbereich mit dem Farbattribut ║
║ "COL" bzw stellt dort vorhandene Fenster wieder her.║
║ Die Subroutine "FREFEN" gibt den für das Fenster ║
║ allokierten Speicherbereich bzw. Filebereich wieder ║
║ frei. Beim Auftreten eines Fehlers wird eine ║
║ Meldung ausgegeben. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 63
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine PRIFEN (NR1,NR2,VSEG,COL,FLAG) ║
║Die Subroutine tauscht die Priorität zweier Bildschirmfenster mit den║
║Fensternummern "NR1" und "NR2" untereinander aus. Wenn ein oder beide║
║Fenster am Bildschirm vorhanden sind, erfolgt die Darstellung mit der║
║jeweils neuen Priorität. Wenn die Fenster nicht am Bildschirm ║
║vorhanden sind, werden die erforderlichen Werte im Verwaltungsfeld ║
║geändert. Dabei ist es nicht erforderlich, daß beide Fenster im Ver- ║
║waltungsfeld vorhanden sind. Der frei werdende Hintergrund wird mit ║
║dem in "COL" übergebenen Farbattribut gelöscht oder mit dem Inhalt ║
║des Bildschirmfensters Nummer 1 beschrieben. Informationen über ║
║die Ausmaße des Bildschirmfensters und über die Adresse an der es ║
║gespeichert ist, werden automatisch aus einem Verwaltungsfeld, das ║
║sich ebenfalls in der Memory befindet, gelesen. In "VSEG" wird die ║
║Adresse des Verwaltungsfeldes übergeben. Die Adresse wird für alle ║
║Zugriffe auf Fensterroutinen benötigt. Die Nummern der zu ändernden ║
║Fenster stellen die Priorität gegenüber anderen Fenstern dar. Sie ║
║werden in der Variablen "NR1" und "NR2" übergeben. Die neuen ║
║Prioritäten der Fensters werden im Verwaltungsfeld aktualisiert. ║
║Andere auf dem Bildschirm vorhandene Fenster werden von der Routine ║
║ihrer eigenen Priorität entsprechend berücksichtigt. Bei erfolg- ║
║reicher Beendigung der Subroutine wird in "FLAG" eine Null zurück- ║
║gegeben, sonst eine Eins. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Nummer mit der Priorität des ersten Fensters ║
║ [ 1 bis 30 ]. ║
║ Durch die Nummer ist die Hirarchie der Bildschirm- ║
║ fenster festgelegt. ║
║INTEGER Nummer mit der Priorität des zweiten Fensters ║
║ [ 1 bis 30 ]. ║
║ Durch die Nummer ist die Hirarchie der Bildschirm- ║
║ fenster festgelegt. ║
║INTEGER Adresse des Verwaltungsfeldes. ║
║INTEGER Farbattribut; siehe Anhang: "Farbattribute". Wenn ║
║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
║ Ausgabe im Schwarz/Weiß-Modus. ║
║ Bit 0 - 2: Vordergrundfarbe ║
║ Bit 3 : Intensität der Vordergrundfarbe ║
║ Bit 4 - 6: Hintergrundfarbe ║
║ Bit 7 : blinken ║
║ oder: 0 zum Beschreiben des Hintergrundes mit dem ║
║ Inhalt des unter der Nummer 1 abgelegten Fensters. ║
║INTEGER Return: Fehlerflag ║
║ 0: Subroutine erfolgreich abgeschlossen. ║
║ 1: Ein Fehler ist aufgetreten. ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: CLOFEN,GETFEN,GETMEM,PUTMEM ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: INTEGER VSEG,COL ║
║ DATA VSEG/0/,COL/23/ ║
║ CALL LOES (10,10,5,5,32,COL,0) ║
║ CALL RAHM (10,10,5,5,0,COL,0) ║
║ CALL PUTFEN (3,10,10,5,5,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
Seite 64
║ CALL LOES (11,11,9,9,32,COL,0) ║
║ CALL RAHM (11,11,9,9,0,COL,0) ║
║ CALL PUTFEN (5,11,11,9,9,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL PRIFEN (3,5,VSEG,COL,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ RETURN ║
║ 1 WRITE(*,'(1X,A)') 'Fehler!' ║
║ Mit den Subroutinen "LOES" und "RAHM" und "PUTFEN" ║
║ werden zwei Bildschirmfenster mit den Nummern 3 und ║
║ 5 angelegt und mit der entsprechenden Priorität am ║
║ Bildschirm dargestellt. "PRIFEN" wechselt im ║
║ Verwaltungsfeld die Nummern untereinander aus und ║
║ ändert die Bildschirmdarstellung der neuen ║
║ Priorität entsprechend um. Eventuell freiwerdender ║
║ Hintergrund wird mit dem Farbattribut "COL" ║
║ beschrieben. Beim Auftreten eines Fehlers wird eine ║
║ Meldung ausgegeben. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 65
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine MOVFEN (NR,VSEG,COL,FLAG) ║
║Die Subroutine bewegt ein am Bildschirm vorhandenes Fenster mit Hilfe║
║der Cursortasten über den Bildschirm. Informationen über die ║
║Ausmaße des Bildschirmfensters und über die Adresse an der es ║
║gespeichert ist, werden automatisch aus einem Verwaltungsfeld, das ║
║sich ebenfalls in der Memory befindet, gelesen. In "VSEG" wird die ║
║Adresse des Verwaltungsfeldes, das vorher mit einer anderen Fenster- ║
║routine angelegt worden ist, übergeben. Die Adresse wird für alle ║
║Zugriffe auf bis zu 30 im Verwaltungsfeld definierte Fenster durch ║
║Fensterroutinen benötigt. Die Nummer des zu bewegenden Fensters ║
║stellt die Priorität gegenüber anderen Fensters dar. Sie wird in der ║
║Variablen "NR" übergeben. Die Position des über den Bildschirm ║
║bewegten Fensters wird im Verwaltungsfeld aktualisiert. Auf dem ║
║Bildschirm vorhandene Fenster werden von der Routine ihrer in "NR" ║
║vergebenen Priorität entsprechend berücksichtigt. Der Hintergrund ║
║kann entweder mit dem im Verwaltungsfeld unter der Nummer 1 ║
║abgelegten Fensterinhalt oder mit einer Hintergrundfarbe "COL" ║
║beschrieben werden. Die Funktion wird mit der "Escape"- oder mit der ║
║"Return"-Taste beendet. Bei erfolgreicher Beendigung der Subroutine ║
║ist in "FLAG" eine Null, sonst eine Eins. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Nummer des über den Bildschirm zu bewegenden ║
║ Fensters [ 1 bis 30 ]. Wenn die Nummer noch nicht ║
║ durch ein Bildschirmfenster belegt ist, wird die ║
║ Routine mit "FLAG" gleich Eins abgebrochen. ║
║ Durch die Nummer ist die Hirarchie der Bildschirm- ║
║ fenster festgelegt. ║
║INTEGER Adresse des Verwaltungsfeldes. ║
║INTEGER Farbattribut; siehe Anhang: "Farbattribute". Wenn ║
║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
║ Ausgabe im Schwarz/Weiß-Modus. ║
║ Bit 0 - 2: Vordergrundfarbe ║
║ Bit 3 : Intensität der Vordergrundfarbe ║
║ Bit 4 - 6: Hintergrundfarbe ║
║ Bit 7 : blinken ║
║ oder: 0 zum Beschreiben des Hintergrundes mit dem ║
║ Inhalt des unter der Nummer 1 abgelegten Fensters. ║
║INTEGER Return: Fehlerflag ║
║ 0: Subroutine erfolgreich abgeschlossen. ║
║ 1: Ein Fehler ist aufgetreten. ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: ATTRIB,GETMEM,PUTMEM,SCREEN ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: INTEGER H,B,ZEI,SP,VSEG,COL ║
║ DATA H/10/,B/20/,ZEI/1/,SP/1/,VSEG/0/,COL/23/ ║
║ CALL LOES (H,B,ZEI,SP,32,COL,0) ║
║ CALL RAHM (H,B,ZEI,SP,0,COL,0) ║
║ CALL PUTFEN (3,H,B,ZEI,SP,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL GETFEN (3,11,40,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL MOVFEN (3,VSEG,COL,I) ║
║ IF (I .NE. 0) GOTO 1 ║
Seite 66
║ CALL CLOFEN (3,VSEG,COL,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL FREFEN (3,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ RETURN ║
║ 1 WRITE(*,'(1X,A)') 'Fehler!' ║
║ Mit den Subroutinen "LOES" und "RAHM" wird ein ║
║ Bildschirmfenster aufgebaut, das mit der Subroutine ║
║ "PUTFEN" in die Memory bzw. in einen temporären ║
║ File ausgelagert wird. Mit der Subroutine "GETFEN" ║
║ wird das gespeicherte Fenster an eine andere ║
║ Position des Bildschirms zurückgeschrieben. Die ║
║ Subroutine "MOVFEN" bewegt das Fenster mit Hilfe der║
║ Cursortasten über den gesamten Bildschirm. Die ║
║ Subroutine "CLOFEN" löscht den das Fenster ║
║ einnehmenden Bildschirmbereich mit dem Farbattribut ║
║ "COL" bzw stellt dort vorhandene Fenster wieder her.║
║ Die Subroutine "FREFEN" gibt den für das Fenster ║
║ allokierten Speicherbereich bzw. Filebereich wieder ║
║ frei. Beim Auftreten eines Fehlers wird eine ║
║ Meldung ausgegeben. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 67
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine MOPFEN (NR,ZEI,SP,VSEG,COL,FLAG) ║
║Die Subroutine verändert die Position eines geöffneten Fensters oder ║
║die im Verwaltungsfeld vorhandenen Werte für die Position. Dabei wird║
║in "ZEI" die Anfangszeile und in "SP" die Anfangsspalte des ║
║Bildschirmfensters übergeben. Der frei werdende Hintergrund wird mit ║
║dem in "COL" übergebenen Farbattribut gelöscht oder mit dem Inhalt ║
║des Bildschirmfensters Nummer 1 beschrieben. Informationen über ║
║die Ausmaße des Bildschirmfensters und über die Adresse an der es ║
║gespeichert ist, werden automatisch aus einem Verwaltungsfeld, das ║
║sich ebenfalls in der Memory befindet, gelesen. In "VSEG" wird die ║
║Adresse des Verwaltungsfeldes übergeben. Die Adresse wird für alle ║
║Zugriffe auf Fensterroutinen benötigt. Die Nummer des zu ändernden ║
║Fensters stellt die Priorität gegenüber anderen Fenstern dar. Sie ║
║wird in der Variablen "NR" übergeben. Die neuen Positionsangaben ║
║des Fensters werden im Verwaltungsfeld aktualisiert. Auf dem ║
║Bildschirm vorhandene Fenster werden von der Routine ihrer in "NR" ║
║vergebenen Priorität entsprechend berücksichtigt. Bei erfolgreicher ║
║Beendigung der Subroutine wird in "FLAG" eine Null zurückgegeben, ║
║sonst eine Eins. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Nummer des in der Größe zu ändernden Fensters ║
║ [ 1 bis 30 ]. Wenn die Nummer noch nicht durch ein ║
║ Bildschirmfenster belegt ist, wird die Routine mit ║
║ "FLAG" gleich Eins abgebrochen. ║
║ Durch die Nummer ist die Hirarchie der Bildschirm- ║
║ fenster festgelegt. ║
║INTEGER Neue Anfangszeile des Bildschirmfensters. ║
║ Ungültige Angaben werden von der Routine automatisch║
║ korrigiert. ║
║INTEGER Neue Anfangsspalte des Bildschirmfensters. ║
║ Ungültige Angaben werden von der Routine automatisch║
║ korrigiert. ║
║INTEGER Adresse des Verwaltungsfeldes. ║
║INTEGER Farbattribut; siehe Anhang: "Farbattribute". Wenn ║
║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
║ Ausgabe im Schwarz/Weiß-Modus. ║
║ Bit 0 - 2: Vordergrundfarbe ║
║ Bit 3 : Intensität der Vordergrundfarbe ║
║ Bit 4 - 6: Hintergrundfarbe ║
║ Bit 7 : blinken ║
║ oder: 0 zum Beschreiben des Hintergrundes mit dem ║
║ Inhalt des unter der Nummer 1 abgelegten Fensters. ║
║INTEGER Return: Fehlerflag ║
║ 0: Subroutine erfolgreich abgeschlossen. ║
║ 1: Ein Fehler ist aufgetreten. ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: CLOFEN,GETFEN,GETMEM,PUTMEM ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: INTEGER H,B,ZEI,SP,VSEG,COL ║
║ DATA H/10/,B/20/,ZEI/1/,SP/1/,VSEG/0/,COL/23/ ║
║ CALL LOES (H,B,ZEI,SP,32,COL,0) ║
║ CALL RAHM (H,B,ZEI,SP,0,COL,0) ║
║ CALL PUTFEN (3,H,B,ZEI,SP,VSEG,I) ║
Seite 68
║ IF (I .NE. 0) GOTO 1 ║
║ CALL GETFEN (3,11,40,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL MOPFEN (3,15,15,VSEG,COL,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL CLOFEN (3,VSEG,COL,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL FREFEN (3,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ RETURN ║
║ 1 WRITE(*,'(1X,A)') 'Fehler!' ║
║ Mit den Subroutinen "LOES" und "RAHM" wird ein ║
║ Bildschirmfenster aufgebaut, das mit der Subroutine ║
║ "PUTFEN" in die Memory bzw. in einen temporären ║
║ File ausgelagert wird. Mit der Subroutine "GETFEN" ║
║ wird das gespeicherte Fenster an eine andere ║
║ Position des Bildschirms zurückgeschrieben. Die ║
║ Subroutine "MOPFEN" ermöglicht das Verändern der ║
║ aktuellen Position des Bildschirmfensters. ║
║ Die Subroutine "CLOFEN" löscht den das Fenster ║
║ einnehmenden Bildschirmbereich mit dem Farbattribut ║
║ "COL" bzw stellt dort vorhandene Fenster wieder her.║
║ Die Subroutine "FREFEN" gibt den für das Fenster ║
║ allokierten Speicherbereich bzw. Filebereich wieder ║
║ frei. Beim Auftreten eines Fehlers wird eine ║
║ Meldung ausgegeben. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 69
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine GROFEN (NR,VSEG,COL,FLAG) ║
║Die Subroutine verändert die Größe eines am Bildschirm vorhandenen ║
║Fensters mit Hilfe der Cursortasten. Dazu wird das Fenster ║
║vorübergehend mit der höchsten Priorität dargestellt. Der vergrößerte║
║Bereich des Fensters wird mit der Hintergrundfarbe "COL" beschrieben ║
║oder mit der Farbe des Fensters, wenn "COL" Null ist. Der vergrößerte║
║Bereich wird vorübergehend mit Zeichen "░" beschrieben, die zum ║
║Schluß der Subroutine gegen Blanks getauscht werden. Informationen ║
║über die Ausmaße des Bildschirmfensters und über die Adresse an der ║
║es gespeichert ist, werden automatisch aus einem Verwaltungsfeld, das║
║sich ebenfalls in der Memory befindet, gelesen. In "VSEG" wird die ║
║Adresse des Verwaltungsfeldes übergeben. Die Adresse wird für alle ║
║Zugriffe auf Fensterroutinen benötigt. Die Nummer des zu ändernden ║
║Fensters stellt die Priorität gegenüber anderen Fenstern dar. Sie ║
║wird in der Variablen "NR" übergeben. Die Größe des am Bildschirm ║
║geänderten Fensters wird im Verwaltungsfeld aktualisiert. Auf dem ║
║Bildschirm vorhandene Fenster werden von der Routine ihrer in "NR" ║
║vergebenen Priorität entsprechend berücksichtigt. Die Subroutine wird║
║mit der "Escape"- oder mit der "Return"-Taste beendet. Bei ║
║erfolgreicher Beendigung der Subroutine ist in "FLAG" eine Null, ║
║sonst eine Eins. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Nummer des am Bildschirm in der Größe zu ändernden ║
║ Fensters [ 1 bis 30 ]. Wenn die Nummer noch nicht ║
║ durch ein Bildschirmfenster belegt ist, wird die ║
║ Routine mit "FLAG" gleich Eins abgebrochen. ║
║ Durch die Nummer ist die Hirarchie der Bildschirm- ║
║ fenster festgelegt. ║
║INTEGER Adresse des Verwaltungsfeldes. ║
║INTEGER Farbattribut; siehe Anhang: "Farbattribute". Wenn ║
║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
║ Ausgabe im Schwarz/Weiß-Modus. ║
║ Bit 0 - 2: Vordergrundfarbe ║
║ Bit 3 : Intensität der Vordergrundfarbe ║
║ Bit 4 - 6: Hintergrundfarbe ║
║ Bit 7 : blinken ║
║ oder: 0 zum Beschreiben des Hintergrundes mit der ║
║ aktuellen Hintergrundfarbe des Fensters. ║
║INTEGER Return: Fehlerflag ║
║ 0: Subroutine erfolgreich abgeschlossen. ║
║ 1: Ein Fehler ist aufgetreten. ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: ATTRIB,FREFEN,GETFEN,GETMEM,PUTFEN,PUTMEM,SCREEN, ║
║ TAST ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: INTEGER H,B,ZEI,SP,VSEG,COL ║
║ DATA H/10/,B/20/,ZEI/1/,SP/1/,VSEG/0/,COL/23/ ║
║ CALL LOES (H,B,ZEI,SP,32,COL,0) ║
║ CALL RAHM (H,B,ZEI,SP,0,COL,0) ║
║ CALL PUTFEN (3,H,B,ZEI,SP,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL GETFEN (3,11,40,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
Seite 70
║ CALL GROFEN (3,VSEG,COL,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL CLOFEN (3,VSEG,COL,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL FREFEN (3,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ RETURN ║
║ 1 WRITE(*,'(1X,A)') 'Fehler!' ║
║ Mit den Subroutinen "LOES" und "RAHM" wird ein ║
║ Bildschirmfenster aufgebaut, das mit der Subroutine ║
║ "PUTFEN" in die Memory bzw. in einen temporären ║
║ File ausgelagert wird. Mit der Subroutine "GETFEN" ║
║ wird das gespeicherte Fenster an eine andere ║
║ Position des Bildschirms zurückgeschrieben. Die ║
║ Subroutine "GROFEN" ermöglicht das Verkleinern oder ║
║ Vergrößern des Fensters auf dem Bildschirm. Die ║
║ Subroutine "CLOFEN" löscht den das Fenster ║
║ einnehmenden Bildschirmbereich mit dem Farbattribut ║
║ "COL" bzw stellt dort vorhandene Fenster wieder her.║
║ Die Subroutine "FREFEN" gibt den für das Fenster ║
║ allokierten Speicherbereich bzw. Filebereich wieder ║
║ frei. Beim Auftreten eines Fehlers wird eine ║
║ Meldung ausgegeben. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 71
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine GRPFEN (NR,H,B,VSEG,COL,FLAG) ║
║Die Subroutine verändert die Größe eines geöffneten oder ║
║geschlossenen Bildschirmfensters. Dabei wird in den Parametern "H" ║
║die neue Höhe und in "B" die neue Breite übergeben. Der vergrößerte ║
║Bereich des Fensters wird mit der Hintergrundfarbe "COL" beschrieben ║
║oder mit der Farbe des Fensters, wenn "COL" Null ist. Informationen ║
║über die Ausmaße des Bildschirmfensters und über die Adresse an der ║
║es gespeichert ist, werden automatisch aus einem Verwaltungsfeld, das║
║sich ebenfalls in der Memory befindet, gelesen. In "VSEG" wird die ║
║Adresse des Verwaltungsfeldes übergeben. Die Adresse wird für alle ║
║Zugriffe auf Fensterroutinen benötigt. Die Nummer des zu ändernden ║
║Fensters stellt die Priorität gegenüber anderen Fenstern dar. Sie ║
║wird in der Variablen "NR" übergeben. Die Größe des am Bildschirm ║
║geänderten Fensters wird im Verwaltungsfeld aktualisiert. Auf dem ║
║Bildschirm vorhandene Fenster werden von der Routine ihrer in "NR" ║
║vergebenen Priorität entsprechend berücksichtigt. Bei erfolgreicher ║
║Beendigung der Subroutine ist in "FLAG" eine Null, sonst eine Eins. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Nummer des in der Größe zu ändernden Fensters ║
║ [ 1 bis 30 ]. Wenn die Nummer noch nicht durch ein ║
║ Bildschirmfenster belegt ist, wird die Routine mit ║
║ "FLAG" gleich Eins abgebrochen. ║
║ Durch die Nummer ist die Hirarchie der Bildschirm- ║
║ fenster festgelegt. ║
║INTEGER Neue Höhe des Bildschirmfensters in Zeilen. ║
║ Ungültige Angaben werden von der Routine automatisch║
║ korrigiert. ║
║INTEGER Neue Breite des Bildschirmfensters in Spalten. ║
║ Ungültige Angaben werden von der Routine automatisch║
║ korrigiert. ║
║INTEGER Adresse des Verwaltungsfeldes. ║
║INTEGER Farbattribut; siehe Anhang: "Farbattribute". Wenn ║
║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
║ Ausgabe im Schwarz/Weiß-Modus. ║
║ Bit 0 - 2: Vordergrundfarbe ║
║ Bit 3 : Intensität der Vordergrundfarbe ║
║ Bit 4 - 6: Hintergrundfarbe ║
║ Bit 7 : blinken ║
║ oder: 0 zum Beschreiben des Hintergrundes mit der ║
║ aktuellen Fensterfarbe. ║
║INTEGER Return: Fehlerflag ║
║ 0: Subroutine erfolgreich abgeschlossen. ║
║ 1: Ein Fehler ist aufgetreten. ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: ATTRIB,CLOFEN,CREMEM,FREMEM,GETFEN,GETMEM,PUTMEM, ║
║ SCREEN ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: INTEGER H,B,ZEI,SP,VSEG,COL ║
║ DATA H/10/,B/20/,ZEI/1/,SP/1/,VSEG/0/,COL/23/ ║
║ CALL LOES (H,B,ZEI,SP,32,COL,0) ║
║ CALL RAHM (H,B,ZEI,SP,0,COL,0) ║
║ CALL PUTFEN (3,H,B,ZEI,SP,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
Seite 72
║ CALL GETFEN (3,11,40,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL GRPFEN (3,15,15,VSEG,COL,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL CLOFEN (3,VSEG,COL,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL FREFEN (3,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ RETURN ║
║ 1 WRITE(*,'(1X,A)') 'Fehler!' ║
║ Mit den Subroutinen "LOES" und "RAHM" wird ein ║
║ Bildschirmfenster aufgebaut, das mit der Subroutine ║
║ "PUTFEN" in die Memory bzw. in einen temporären ║
║ File ausgelagert wird. Mit der Subroutine "GETFEN" ║
║ wird das gespeicherte Fenster an eine andere ║
║ Position des Bildschirms zurückgeschrieben. Die ║
║ Subroutine "GRPFEN" ermöglicht das Verkleinern oder ║
║ Vergrößern des Fensters auf 15 Zeilen und Spalten. ║
║ Die Subroutine "CLOFEN" löscht den das Fenster ║
║ einnehmenden Bildschirmbereich mit dem Farbattribut ║
║ "COL" bzw stellt dort vorhandene Fenster wieder her.║
║ Die Subroutine "FREFEN" gibt den für das Fenster ║
║ allokierten Speicherbereich bzw. Filebereich wieder ║
║ frei. Beim Auftreten eines Fehlers wird eine ║
║ Meldung ausgegeben. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 73
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine LOSFEN (NR,ZEICH,COL,VSEG,FLAG) ║
║Die Subroutine überschreibt das Bildschirmfenster mit der Nummer "NR"║
║mit dem in "ZEICH" übergebenen Zeichen. Hintergrund- und Vordergrund-║
║farben werden mit "COL" gesetzt, oder es werden die aktuellen Farben ║
║benutzt, wenn "COL" Null ist. Informationen über die Fensterform ║
║und die Adresse an der es gespeichert ist, werden automatisch im ║
║Verwaltungsfeld, das sich ebenfalls in der Memory befindet, abgelegt.║
║Die Adresse des Verwaltungsfeldes wird in "VSEG" übergeben. Die ║
║Adresse wird für alle Zugriffe auf bis zu 30 im Verwaltungsfeld ║
║definierte Fenster benötigt. Die Nummer des zu umrahmenden ║
║Bildschirmfensters stellt die Priorität gegenüber anderen Fenstern ║
║dar. Sie wird in der Variablen "NR" übergeben. Das zu überschreibende║
║Bildschirmfenster muß bereits in der Memory vorhanden sein. Es muß ║
║sich aber nicht auf dem Bildschirm befinden. Bei erfolgreicher ║
║Beendigung der Routine ist in "FLAG" eine Null, sonst eine Eins. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Nummer des zu umrahmenden Bildschirmfensters ║
║ [ 1 bis 30 ]. Wenn die Nummer noch nicht durch ein ║
║ Bildschirmfenster belegt ist, wird die Routine mit ║
║ "FLAG" gleich Eins abgebrochen. ║
║ Durch die Nummer ist die Hirarchie der Bildschirm- ║
║ fenster festgelegt. ║
║INTEGER ASCII-Code des Zeichens, mit dem überschrieben ║
║ werden soll [0 bis 255]. ║
║INTEGER Farbattribut für Vorder- und Hintergrundfarben. ║
║ siehe Anhang: "Farbattribute". Wenn ein Monochrome- ║
║ Monitor erkannt wird, erfolgt die Ausgabe im ║
║ Schwarz/Weiß-Modus. ║
║ Bit 0 - 2: Vordergrundfarbe ║
║ Bit 3 : Intensität der Vordergrundfarbe ║
║ Bit 4 - 6: Hintergrundfarbe ║
║ Bit 7 : blinken ║
║ oder 0: es wird das vorhandene Attribut des Fensters║
║ verwendet. ║
║INTEGER Adresse des Verwaltungsfeldes. ║
║INTEGER Return: Fehlerflag ║
║ 0: Subroutine erfolgreich abgeschlossen. ║
║ 1: Ein Fehler ist aufgetreten. ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: ATTRIB,GETFEN,GETMEM,PUTMEM ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: INTEGER FELD(12),VSEG ║
║ OPEN (1,FILE='TEST',ACCESS='DIRECT', ║
║ -FORM='FORMATTED',RECL=72,STATUS='OLD') ║
║ CALL TEXFEN (2,12,3,20,1,1,23,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL RAMFEN (2,1,0,'Auswählen: <Esc>','NUM',VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL GETFEN (2,5,10,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL ME1FEN (2,12,3,FELD,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL LOSFEN (2,32,23,VSEG,I) ║
Seite 74
║ IF (I .NE. 0) GOTO 1 ║
║ RETURN ║
║ 1 WRITE(*,'(1X,A)') 'FEHLER' ║
║ Aus einer direct orgsanisierten Datei mit dem Unit 1║
║ werden mit Hilfe der Subroutine "TEXFEN" 12 Menü- ║
║ texte dreispaltig mit einer jeweiligen Länge von ║
║ 20 Characters und dem Farbattribut 23 im Fenster ║
║ Nummer 2 abgelegt. ║
║ Die Subroutine "RAMFEN" umgibt das Menüfeld im ║
║ Fenster mit einen einfachen Rahmen und schreibt in ║
║ die erste Zeile des Fensters eine Meldung. In die ║
║ letzte Zeile des Fensters wird außerdem die Nummer ║
║ des Fensters eingeblendet. Rahmen und Texte werden ║
║ in der vorhandenen Farbe dargestellt. ║
║ Die Subroutine "GETFEN" öffnet das Fenster mit dem ║
║ Menütext am Bildschirm ab der 5. Zeile und der 10. ║
║ Spalte. ║
║ "ME1FEN" ermöglicht die Auswahl eines einzelnen ║
║ Menüpunktes mit Hilfe der Cursortasten und der ║
║ <Escape>-Taste. ║
║ "LOSFEN" überschreibt anschließend das Bildschirm- ║
║ fenster mit Blancs. Der Hintergrund wird dabei blau ║
║ gesetzt. ║
║ Wenn in einer Subroutine ein Fehler auftritt, wird ║
║ eine Fehlermeldung ausgegeben. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 75
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine RAMFEN (NR,ART,COL,TEXTO,TEXTU,VSEG,FLAG)║
║Die Subroutine unschließt das Bildschirmfenster mit der Nummer "NR" ║
║mit einen Rahmen, dessen Form in "ART" übergeben wird. In dem ║
║Characterstring "TEXTO" kann eine Meldung für die erste Zeile, in ║
║"TEXTU" für die letzte Zeile des Bildschirmfensters übergeben werden.║
║Es ist möglich, in der letzten Zeile die Nummer des Fensters ║
║einzublenden oder auf die Meldungen zu verzichten. Mit Hilfe der ║
║Variablen "COL" kann eine neue Farbe oder das im Fenster vorhandene ║
║Farbattribut gewählt werden. Informationen über die Form des Fensters║
║und die Adresse an der es gespeichert ist, werden automatisch im ║
║Verwaltungsfeld, das sich ebenfalls in der Memory befindet, abgelegt.║
║Die Adresse des Verwaltungsfeldes wird in "VSEG" übergeben. Die ║
║Adresse wird für alle Zugriffe auf bis zu 30 im Verwaltungsfeld ║
║definierte Fenster benötigt. Die Nummer des zu umrahmenden ║
║Bildschirmfensters stellt die Priorität gegenüber anderen Fenstern ║
║dar. Sie wird in der Variablen "NR" übergeben. Das zu umrahmende ║
║Bildschirmfenster muß bereits in der Memory vorhanden sein. Es muß ║
║sich aber nicht auf dem Bildschirm befinden. Bei erfolgreicher ║
║Beendigung der Routine ist in "FLAG" eine Null, sonst eine Eins. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Nummer des zu umrahmenden Bildschirmfensters ║
║ [ 1 bis 30 ]. Wenn die Nummer noch nicht durch ein ║
║ Bildschirmfenster belegt ist, wird die Routine mit ║
║ "FLAG" gleich Eins abgebrochen. ║
║ Durch die Nummer ist die Hirarchie der Bildschirm- ║
║ fenster festgelegt. ║
║INTEGER Art der Rahmenzeichnung: ║
║ 0: keinen Rahmen zeichnen ║
║ 1: ┌─────── ║
║ 2: ╔═══════ ║
║ 3: ████████ ║
║ 4: ******** ║
║INTEGER Farbattribut für den Rahmen und die Texte; ║
║ siehe Anhang: "Farbattribute". Wenn ein Monochrome- ║
║ Monitor erkannt wird, erfolgt die Ausgabe im ║
║ Schwarz/Weiß-Modus. ║
║ Bit 0 - 2: Vordergrundfarbe ║
║ Bit 3 : Intensität der Vordergrundfarbe ║
║ Bit 4 - 6: Hintergrundfarbe ║
║ Bit 7 : blinken ║
║CHARACTERSTRING Text, der zentriert in die obere Fensterzeile ║
║ geschrieben werden soll, oder CHAR(0) wenn kein Text║
║ in die obere Fensterzeile geschrieben werden soll. ║
║CHARACTERSTRING Text, der zentriert in die untere Fensterzeile ║
║ geschrieben werden soll, oder CHAR(0) wenn kein Text║
║ in die untere Fensterzeile geschrieben werden soll, ║
║ oder 'NUM' zum Schreiben der Fensternummer in die ║
║ untere Fensterzeile. ║
║INTEGER Adresse des Verwaltungsfeldes. ║
║INTEGER Return: Fehlerflag ║
║ 0: Subroutine erfolgreich abgeschlossen. ║
║ 1: Ein Fehler ist aufgetreten. ║
╟─────────────────────────────────────────────────────────────────────╢
Seite 76
║Subroutinen: ATTRIB,GETFEN,GETMEM,LAENGE,PUTMEM,UPCASE ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: INTEGER FELD(12),VSEG ║
║ OPEN (1,FILE='TEST',ACCESS='DIRECT', ║
║ -FORM='FORMATTED',RECL=72,STATUS='OLD') ║
║ CALL TEXFEN (2,12,3,20,1,1,23,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL RAMFEN (2,1,0,'Auswählen: <Esc>','NUM',VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL GETFEN (2,5,10,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL ME1FEN (2,12,3,FELD,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ RETURN ║
║ 1 WRITE(*,'(1X,A)') 'FEHLER' ║
║ Aus einer direct orgsanisierten Datei mit dem Unit 1║
║ werden mit Hilfe der Subroutine "TEXFEN" 12 Menü- ║
║ texte dreispaltig mit einer jeweiligen Länge von ║
║ 20 Characters und dem Farbattribut 23 im Fenster ║
║ Nummer 2 abgelegt. ║
║ Die Subroutine "RAMFEN" umgibt das Menüfeld im ║
║ Fenster mit einen einfachen Rahmen und schreibt in ║
║ die erste Zeile des Fensters eine Meldung. In die ║
║ letzte Zeile des Fensters wird außerdem die Nummer ║
║ des Fensters eingeblendet. Rahmen und Texte werden ║
║ in der vorhandenen Farbe dargestellt. ║
║ Die Subroutine "GETFEN" öffnet das Fenster mit dem ║
║ Menütext am Bildschirm ab der 5. Zeile und der 10. ║
║ Spalte. ║
║ "ME1FEN" ermöglicht die Auswahl eines einzelnen ║
║ Menüpunktes mit Hilfe der Cursortasten und der ║
║ <Escape>-Taste. Das der Auswahl entsprechende ║
║ Äquivalent in "FELD" wird dadurch ungleich Null ║
║ gesetzt. Es ist zu beachten, daß die Anzahl der ║
║ Menüpunkte und die Menüspaltenzahl in den Routinen ║
║ "TEXFEN" und "ME1FEN" übereinstimmen. ║
║ Wenn in einer Subroutine ein Fehler auftritt, wird ║
║ eine Fehlermeldung ausgegeben. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 77
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine WRIFEN (NR,VSEG,FLAG) ║
║Die Subroutine schreibt ein am Bildschirm vorhandenes Fenster ║
║vorübergehend mit höchster Priorität an der gleichen Position auf den║
║Bildschirm. Das Fenster kann mit beliebigem Text beschrieben werden. ║
║Der Text wird mit Hilfe des Cursorblocks im Fenster positioniert. ║
║Nachdem das Beschreiben des Fensters mit der <Escape>-Taste beendet ║
║worden ist, wird das Fenster mit der ursprünglichen Priorität ║
║zwischen den restlichen offenen Fenstern eingeordnet. Informationen ║
║über die Ausmaße des Bildschirmfensters und über die Adresse an der ║
║es gespeichert ist, werden automatisch aus einem Verwaltungsfeld, das║
║sich ebenfalls in der Memory befindet, gelesen. In "VSEG" wird die ║
║Adresse des Verwaltungsfeldes übergeben. Die Adresse wird für alle ║
║Zugriffe auf bis zu 30 im Verwaltungsfeld definierte Fenster ║
║benötigt. Die Nummer des darzustellenden Bildschirmfensters stellt ║
║die Priorität gegenüber anderen Fensters dar. Sie wird in der ║
║Variablen "NR" übergeben. Ein vorhandener Bildschirmrahmen wird nicht║
║überschrieben. Bei erfolgreicher Beendigung der Routine ist in "Flag"║
║eine Null, sonst eine Eins. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Nummer des mit Text zu beschreibenden Bildschirm- ║
║ fensters [ 1 bis 30 ]. Wenn die Nummer noch nicht ║
║ durch ein Bildschirmfenster belegt ist, wird die ║
║ Routine mit "FLAG" gleich Eins abgebrochen. ║
║ Durch die Nummer ist die Hirarchie der Bildschirm- ║
║ fenster festgelegt. ║
║INTEGER Adresse des Verwaltungsfeldes. ║
║INTEGER Return: Fehlerflag ║
║ 0: Subroutine erfolgreich abgeschlossen. ║
║ 1: Ein Fehler ist aufgetreten. ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: AREAD,FREFEN,GETFEN,GETMEM,PUTFEN,PUTMEM,SCREEN ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: INTEGER H,B,ZEI,SP,VSEG,COL ║
║ DATA H/10/,B/20/,ZEI/1/,SP/1/,VSEG/0/,COL/23/ ║
║ CALL LOES (H,B,ZEI,SP,32,COL,0) ║
║ CALL RAHM (H,B,ZEI,SP,0,COL,0) ║
║ CALL PUTFEN (3,H,B,ZEI,SP,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL WRIFEN (3,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL CLOFEN (3,VSEG,COL,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL FREFEN (3,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ RETURN ║
║ 1 WRITE(*,'(1X,A)') 'Fehler!' ║
║ Mit den Subroutinen "LOES" und "RAHM" wird ein ║
║ Bildschirmfenster aufgebaut, das mit der Subroutine ║
║ "PUTFEN" in die Memory bzw. in einen temporären ║
║ File ausgelagert wird. Mit der Subroutine "WRIFEN" ║
║ wird das gespeicherte Fenster am Bildschirm mit Text║
║ beschrieben und in die Memory zurückgeschrieben. Die║
║ Subroutine "CLOFEN" löscht den das Fenster ║
Seite 78
║ einnehmenden Bildschirmbereich mit dem Farbattribut ║
║ "COL" bzw stellt dort vorhandene Fenster wieder her.║
║ Die Subroutine "FREFEN" gibt den für das Fenster ║
║ allokierten Speicherbereich bzw. Filebereich wieder ║
║ frei. Beim Auftreten eines Fehlers wird eine ║
║ Meldung ausgegeben. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 79
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine ME1FEN (NR,ANZ,SPZ,FELD,VSEG,COL,FLAG) ║
║Die Subroutine schreibt ein schon vorher geöffnetes Fenster ║
║vorübergehend mit höchster Priorität an der gleichen Position auf den║
║Bildschirm. Mit den Cursortasten kann ein Menüfeld angefahren und mit║
║der <Escape>- oder <Return>-Taste ausgewählt werden. In "COL" wird ║
║das Farbattribut für die Menüfelder übergeben. Wenn "COL" eine Null ║
║enthält, wird die aktuelle Farbe aus dem ersten Menüfeld übernommen. ║
║Mit einer Eins wird die Farbe des Rahmens übernommen. Das jeweils ║
║aktuelle Menüfeld wird mit intensivierter Farbe angezeigt. Das dem ║
║gewähltem Menüfeld entsprechende Element des Feldes "FELD" wird ║
║gesetzt, alle anderen Feldelemente enthalten eine Null. Die Anzahl ║
║der Menüfelder wird mit "ANZ" bestimmt. Die Subroutine vermindert die║
║Anzahl der berücksichtigten Feldelemente automatisch, wenn die ║
║Ausmaße des Fensters nicht ausreichen. In "SPZ" wird die Anzahl der ║
║Menüspalten festgelegt. Der Menütext muß vor dem Aufruf der Routine ║
║bereits im Fenster vorhanden sein. Dafür eignet sich die Routine ║
║"TEXFEN", die Texte aus einer Datei in einem Fenster positioniert. ║
║Nachdem die Auswahl eines Menüpunktes <Escape> oder <Return> beendet ║
║worden ist, wird das Fenster mit der ursprünglichen Priorität ║
║zwischen den restlichen offenen Fenstern eingeordnet. Informationen ║
║über die Ausmaße des Bildschirmfensters und über die Adresse an der ║
║es gespeichert ist, werden automatisch aus einem Verwaltungsfeld, das║
║sich ebenfalls in der Memory befindet, gelesen. In "VSEG" wird die ║
║Adresse des Verwaltungsfeldes, das vorher mit Hilfe anderer Fenster- ║
║routinen angelegt worden ist, übergeben. Die Adresse wird für alle ║
║Zugriffe auf bis zu 30 im Verwaltungsfeld definierte Fenster ║
║benötigt. Die Nummer des darzustellenden Bildschirmfensters stellt ║
║die Priorität gegenüber anderen Fensters dar. Sie wird in der ║
║Variablen "NR" übergeben. Bei erfolgreicher Beendigung der Routine ║
║ist in "FLAG" eine Null, sonst eine Eins. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Nummer des zur Menüauswahl bestimmten Bildschirm- ║
║ fensters [ 1 bis 30 ]. Wenn die Nummer noch nicht ║
║ durch ein Bildschirmfenster belegt ist, wird die ║
║ Routine mit "FLAG" gleich Eins abgebrochen. ║
║ Durch die Nummer ist die Hirarchie der Bildschirm- ║
║ fenster festgelegt. ║
║INTEGER Anzahl der gewünschten Mneüfelder. ║
║ Return: Anzahl der tatsächlichen Menüfelder, wenn ║
║ die Größe des Menüfensters nicht ausreicht. ║
║INTEGER Anzahl der nebeneinander angeordneten Menüfelder im ║
║ Bildschirmfenster. ║
║INTEGERFELD Return: Feld der Form [ FELD(ANZ) ] ║
║ Das Feldelement des äquivalenten Menüfeldes, das mit║
║ <Escape> oder <Return> ausgewählt wurde, entspricht ║
║ der Nummer des Menüfeldes, die restlichen ║
║ Feldelemente werden Null gesetzt. ║
║INTEGER Adresse des Verwaltungsfeldes ║
║INTEGER Farbattribut; Siehe Anhang: "Farbattribute". Wenn ║
║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
║ Ausgabe im Schwarz/weiß-Modus. ║
║ Bit 0 - 2: Vordergrundfarbe ║
║ Bit 3 : Intensität der Vordergundfarbe ║
Seite 80
║ Bit 4 - 6: Hintergrundfarbe ║
║ Bit 7 : blinken ║
║ oder: ║
║ 0: Übernahme der Farbe aus dem ersten Menüfeld ║
║ oder: ║
║ 1: Übernahme der Rahmenfarbe für die Menüfelder ║
║INTEGER Return: Fehlerflag ║
║ 0: Subroutine erfolgreich abgeschlossen. ║
║ 1: Ein Fehler ist aufgetreten. ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: ATTRIB,CTBUF,GETFEN,GETMEM,PUTMEM,SCREEN,TAST ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: INTEGER FELD(12),VSEG ║
║ OPEN (1,FILE='TEST',ACCESS='DIRECT', ║
║ -FORM='FORMATTED',RECL=72,STATUS='OLD') ║
║ CALL TEXFEN (2,12,3,20,1,1,23,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL RAMFEN (2,1,0,'Auswählen: <Esc>',VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL GETFEN (2,5,10,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL ME1FEN (2,12,3,FELD,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ RETURN ║
║ 1 WRITE(*,'(1X,A)') 'FEHLER' ║
║ Aus einer direct orgsanisierten Datei mit dem Unit 1║
║ werden mit Hilfe der Subroutine "TEXFEN" 12 Menü- ║
║ texte dreispaltig mit einer jeweiligen Länge von ║
║ 20 Characters und dem Farbattribut 23 im Fenster ║
║ Nummer 2 abgelegt. ║
║ Die Subroutine "RAMFEN" umgibt das Menüfeld im ║
║ Fenster mit einen einfachen Rahmen und schreibt in ║
║ die erste Zeile des Fensters eine Meldung. Dazu wird║
║ das vorhandene Farbattribut benutzt. ║
║ Die Subroutine "GETFEN" öffnet das Fenster mit dem ║
║ Menütext am Bildschirm ab der 5. Zeile und der 10. ║
║ Spalte. ║
║ "ME1FEN" ermöglicht die Auswahl eines einzelnen ║
║ Menüpunktes mit Hilfe der Cursortasten und der ║
║ <Escape>-Taste. Das der Auswahl entsprechende ║
║ Äquivalent in "FELD" wird dadurch ungleich Null ║
║ gesetzt. Es ist zu beachten, daß die Anzahl der ║
║ Menüpunkte und die Menüspaltenzahl in den Routinen ║
║ "TEXFEN" und "ME1FEN" übereinstimmen. ║
║ Wenn in einer Subroutine ein Fehler auftritt, wird ║
║ eine Fehlermeldung ausgegeben. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 81
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine MENFEN (NR,ANZ,SPZ,FELD,VSEG,COL,FLAG) ║
║Die Subroutine schreibt ein schon vorher geöffnetes Fenster ║
║vorübergehend mit höchster Priorität an der gleichen Position auf den║
║Bildschirm. Mit Hilfe der Cursortasten kann zwischen den Menüpunkten ║
║gewechselt werden. In "COL" wird das Farbattribut für die Menüfelder ║
║übergeben. Wenn "COL" eine Null enthält, wird die aktuelle Farbe aus ║
║dem ersten Menüfeld übernommen. Mit einer Eins wird die Farbe des ║
║Rahmens übernommen. Der jeweils aktuelle Menüpunkt wird mit ║
║intensivierter Farbe angezeigt. Die <F1>-Taste ermöglicht die Auswahl║
║eines oder mehrerer Menüpunkte. Ausgewählte Menüpunkte werden inverse║
║auf dem Bildschirm dargestellt. Mit der <F2>-Taste ist es möglich, ║
║bereits gewählte Menüpunkte wieder rückgängig zu machen. Mit <Escape>║
║oder <Return> wird die Subroutine beendet. Die den gewählten ║
║Menüpunkten entsprechenden Feldelemente des Feldes "FELD" werden ║
║gesetzt, alle anderen Feldelemente enthalten eine Null. Die Anzahl ║
║der Menüpunkte wird mit "ANZ" bestimmt. Die Subroutine vermindert die║
║Anzahl der berücksichtigten Feldelemente automatisch, wenn die ║
║Ausmaße des Fensters nicht ausreichen. In "SPZ" wird die Anzahl der ║
║Menüspalten festgelegt. Der Menütext muß vor dem Aufruf der Routine ║
║bereits im Fenster vorhanden sein. Dafür eignet sich die Routine ║
║"TEXFEN", die Texte aus einer Datei in einem Fenster positioniert. ║
║Nachdem die Auswahl eines Menüpunktes mit <Escape> oder <Return> ║
║beendet worden ist, wird das Fenster mit der ursprünglichen Priorität║
║zwischen den restlichen offenen Fenstern eingeordnet. Informationen ║
║über die Ausmaße des Bildschirmfensters und über die Adresse an der ║
║es gespeichert ist, werden automatisch aus einem Verwaltungsfeld, das║
║sich ebenfalls in der Memory befindet, gelesen. In "VSEG" wird die ║
║Adresse des Verwaltungsfeldes, das vorher mit Hilfe anderer Fenster- ║
║routinen angelegt worden ist, übergeben. Die Adresse wird für alle ║
║Zugriffe auf bis zu 30 im Verwaltungsfeld definierte Fenster ║
║benötigt. Die Nummer des darzustellenden Bildschirmfensters stellt ║
║die Priorität gegenüber anderen Fensters dar. Sie wird in der ║
║Variablen "NR" übergeben. Bei erfolgreicher Beendigung der Routine ║
║ist in "FLAG" eine Null, sonst eine Eins. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Nummer des zur Menüauswahl bestimmten Bildschirm- ║
║ fensters [ 1 bis 30 ]. Wenn die Nummer noch nicht ║
║ durch ein Bildschirmfenster belegt ist, wird die ║
║ Routine mit "FLAG" gleich Eins abgebrochen. ║
║ Durch die Nummer ist die Hirarchie der Bildschirm- ║
║ fenster festgelegt. ║
║INTEGER Anzahl der gewünschten Mneüfelder. ║
║ Return: Anzahl der tatsächlichen Menüfelder, wenn ║
║ die Größe des Menüfensters nicht ausreicht. ║
║INTEGER Anzahl der nebeneinander angeordneten Menüfelder im ║
║ Bildschirmfenster. ║
║INTEGERFELD Return: Feld der Form [ FELD(ANZ) ] ║
║ Die Feldelemente der äquivalenten Menüfelder, die ║
║ mit der <F1>-Taste ausgewählt wurden, entsprechen ║
║ den Nummern der Menüfelder, die restlichen ║
║ Feldelemente werden Null gesetzt. ║
║INTEGER Adresse des Verwaltungsfeldes ║
║INTEGER Farbattribut; Siehe Anhang: "Farbattribute". Wenn ║
Seite 82
║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
║ Ausgabe im Schwarz/weiß-Modus. ║
║ Bit 0 - 2: Vordergrundfarbe ║
║ Bit 3 : Intensität der Vordergundfarbe ║
║ Bit 4 - 6: Hintergrundfarbe ║
║ Bit 7 : blinken ║
║ oder: ║
║ 0: Übernahme der Farbe aus dem ersten Menüfeld ║
║ oder: ║
║ 1: Übernahme der Rahmenfarbe für die Menüfelder ║
║INTEGER Return: Fehlerflag ║
║ 0: Subroutine erfolgreich abgeschlossen. ║
║ 1: Ein Fehler ist aufgetreten. ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: ATTRIB,CTBUF,GETFEN,GETMEM,PUTMEM,SCREEN,TAST ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: INTEGER FELD(12),VSEG ║
║ OPEN (1,FILE='TEST',ACCESS='DIRECT', ║
║ -FORM='FORMATTED',RECL=72,STATUS='OLD') ║
║ CALL TEXFEN (2,12,3,20,1,1,23,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL RAMFEN (2,1,0,'Auswählen: <Esc>',VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL GETFEN (2,5,10,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL MENFEN (2,12,3,FELD,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ RETURN ║
║ 1 WRITE(*,'(1X,A)') 'FEHLER' ║
║ Aus einer direct orgsanisierten Datei mit dem Unit 1║
║ werden mit Hilfe der Subroutine "TEXFEN" 12 Menü- ║
║ texte dreispaltig mit einer jeweiligen Länge von ║
║ 20 Characters und dem Farbattribut 23 im Fenster ║
║ Nummer 2 abgelegt. ║
║ Die Subroutine "RAMFEN" umgibt das Menüfeld im ║
║ Fenster mit einen einfachen Rahmen und schreibt in ║
║ die erste Zeile des Fensters eine Meldung. Dazu wird║
║ das vorhandene Farbattribut benutzt. ║
║ Die Subroutine "GETFEN" öffnet das Fenster mit dem ║
║ Menütext am Bildschirm ab der 5. Zeile und der 10. ║
║ Spalte. ║
║ "MENFEN" ermöglicht die Auswahl eines oder mehrerer ║
║ Menüpunkte mit Hilfe der Cursor-, F1-, F2- <Return>-║
║ und <Escape>-Tasten. Die der Auswahl entsprechenden ║
║ Äquivalente in "FELD" werden dadurch ungleich Null ║
║ gesetzt. Es ist zu beachten, daß die Anzahl der ║
║ Menüpunkte und die Menüspaltenzahl in den Routinen ║
║ "TEXFEN" und "MENFEN" übereinstimmen. ║
║ Wenn in einer Subroutine ein Fehler auftritt, wird ║
║ eine Fehlermeldung ausgegeben. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 83
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine VERFEN (VSEG,COL,FLAG) ║
║Die Subroutine eröffnet ein Verwaltungsfenster am Bildschirm, mit ║
║dessen Hilfe bis zu 28 existierende Fenster cursorgesteuert am Bild- ║
║schirm verwaltet werden können. Es wird ein Fenster mit dem aktuellen║
║Bildschirminhalt in der niedrigsten Prioritätsstufe angelegt. Die ║
║höchste Prioritätsstufe erhält das Verwaltungsfenster. Nach dem ║
║Beenden der Subroutine wird das Verwaltungsfenster geschlossen. Die ║
║Fenster mit den Nummern 1 und 30 dürfen nicht existieren; zu ║
║verwaltende Fenster müssen bereits existieren. Es können Fenster ║
║mitverwaltet werden, die bereits vor dem Aufruf der Subroutine auf ║
║dem Bildschirm vorhanden sind. Wegen möglicher Farbdiskrepanzen wird ║
║aber empfohlen, alle geöffneten Fenster vorher zu schließen. In ║
║"COL" wird ein Farbattribut für eventuell freiwerdenden Hintergrund ║
║und für zu beschreibenden Vordergrund an die Routine übergeben. ║
║"VSEG" enthält die Adresse des Verwaltungsfeldes, in dem sich alle ║
║aktuellen Informationen über die existierenden Fenster befinden. ║
║Es können die folgenden Verwaltungsarten durchführt werden: ║
║1. Öffnen eines Fensters ║
║2. Bewegen eines Fensters ║
║3. Beschreiben eines Fensters mit Text ║
║4. Inhalt eines Fensters löschen ║
║5. Umrahmen eines Fensters und Ausgabe der Fensternummer ║
║6. Vergrößern oder verkleinern eines Fensters ║
║7. Schließen eines Fensters ║
║8. Freigeben eines Fensters ║
║Fenstermanipulationen, die nicht möglich sind, werden akustisch ║
║angezeigt. Nach dem Abschluß der Fensterverwaltung bleibt die ║
║aktuelle Konfiguration zur weiteren Bearbeitung am Bildschirm ║
║vorhanden. Bei erfolgreicher Beendigung der Subroutine steht in ║
║"FLAG" eine Null, sonst eine Eins. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Adresse des Verwaltungsfeldes. ║
║INTEGER Farbattribut; siehe Anhang: "Farbattribute". Wenn ║
║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
║ Ausgabe im Schwarz/Weiß-Modus. ║
║ Bit 0 - 2: Vordergrundfarbe ║
║ Bit 3 : Intensität der Vordergrundfarbe ║
║ Bit 4 - 6: Hintergrundfarbe ║
║ Bit 7 : blinken ║
║INTEGER Return: Fehlerflag ║
║ 0: Subroutine erfolgreich abgeschlossen. ║
║ 1: Ein Fehler ist aufgetreten. ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: CLOFEN,FREFEN,GETFEN,GETMEM,IREAD,MAKFEN,MOVFEN, ║
║ PIEPS,PUTFEN,RAMFEN,WRIFEN ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: INTEGER H,B,ZEI,SP,VSEG,COL ║
║ DATA VSEG/0/,COL/23/ ║
║ DO 1 I=2,29 ║
║ CALL LOES (5,I+2,5,5,32,COL+I,0) ║
║ CALL PUTFEN (I,5,I+2,5,5,VSEG,J) ║
║ IF (J .NE. 0) GOTO 1 ║
║ 1 CONTINUE ║
Seite 84
║ CALL VERFEN (VSEG,COL,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ RETURN ║
║ 1 WRITE(*,'(1X,A)') 'Fehler!' ║
║ Mit den Subroutinen "LOES" und "PUTFEN" werden ║
║ 28 Fenster verschiedener Größe und mit verschiedenen║
║ Farben erzeugt. ║
║ Die Subroutine "VERFEN" ermöglicht die Verwaltung ║
║ der 28 Fenster. Wenn die Subroutine beendet wird, ║
║ bleibt der aktuelle Zustand am Bildschirm erhalten. ║
║ Beim Auftreten eines Fehlers wird eine Meldung ║
║ ausgegeben. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 85
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine CLOFEN (NR,VSEG,COL,FLAG) ║
║Die Subroutine schließt ein Fenster am Bildschirm und stellt die ║
║vorhandenen Bildschirmfenster wieder her. Das Fenster kann mit Hilfe ║
║der Subroutine "GETFEN" jederzeit wieder auf den Bildschirm gebracht ║
║werden. Größen, Positionen und Adressen der vorhandenen Fenster und ║
║des zu schließenden Fensters werden automatisch aus einem ║
║Verwaltungsfeld, das sich ebenfalls in der Memory befindet, gelesen. ║
║In "VSEG" wird die Adresse des Verwaltungsfeldes übergeben. Die ║
║Adresse wird für alle Zugriffe auf bis zu 30 im Verwaltungsfeld ║
║definierte Fenster durch Fensterroutinen benötigt. Die Nummer des zu ║
║schließenden Fensters wird in der Variablen "NR" übergeben. Sie ║
║stellt die Priorität des Bildschirmfensters gegenüber anderen ║
║Fenstern dar. Auf dem Bildschirm vorhandene Fenster werden ihrer ║
║Priorität entsprechend berücksichtigt. Der Hintergrund kann ║
║entweder mit dem im Verwaltungsfeld unter der Nummer 1 abgelegten ║
║Fensterinhalt oder mit einer Hintergrundfarbe "COL" beschrieben ║
║werden. Bei erfolgreicher Beendigung der Subroutine ist in "FLAG" ║
║eine Null, sonst eine Eins. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Nummer des am Bildschirm zu schließenden Fensters. ║
║ [ 1 bis 30 ]. Wenn die Nummer noch nicht durch ein ║
║ Bildschirmfenster belegt ist, wird die Routine mit ║
║ "FLAG" gleich Eins abgebrochen. ║
║ Durch die Nummer ist die Hirarchie der Bildschirm- ║
║ fenster festgelegt. ║
║INTEGER Adresse des Verwaltungsfeldes. ║
║INTEGER Farbattribut; siehe Anhang: "Farbattribute". Wenn ║
║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
║ Ausgabe im Schwarz/Weiß-Modus. ║
║ Bit 0 - 2: Vordergrundfarbe ║
║ Bit 3 : Intensität der Vordergrundfarbe ║
║ Bit 4 - 6: Hintergrundfarbe ║
║ Bit 7 : blinken ║
║ oder: 0 zum Beschreiben des Hintergrundes mit dem ║
║ Inhalt des unter der Nummer 1 abgelegten Fensters. ║
║INTEGER Return: Fehlerflag ║
║ 0: Subroutine erfolgreich abgeschlossen. ║
║ 1: Ein Fehler ist aufgetreten. ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: ATTRIB,GETMEM,PUTMEM,SCREEN ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: INTEGER H,B,ZEI,SP,VSEG,COL ║
║ DATA H/10/,B/20/,ZEI/1/,SP/1/,VSEG/0/,COL/23/ ║
║ CALL LOES (H,B,ZEI,SP,32,COL,0) ║
║ CALL RAHM (H,B,ZEI,SP,0,COL,0) ║
║ CALL PUTFEN (3,H,B,ZEI,SP,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL GETFEN (3,11,40,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL CLOFEN (3,VSEG,COL,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL FREFEN (3,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
Seite 86
║ RETURN ║
║ 1 WRITE(*,'(1X,A)') 'Fehler!' ║
║ Mit den Subroutinen "LOES" und "RAHM" wird ein ║
║ Bildschirmfenster aufgebaut, das mit der Subroutine ║
║ "PUTFEN" in die Memory bzw. in einen temporären ║
║ File ausgelagert wird. Mit der Subroutine "GETFEN" ║
║ wird das gespeicherte Fenster an eine andere ║
║ Position des Bildschirms zurückgeschrieben. Die ║
║ Subroutine "CLOFEN" löscht den das Fenster ║
║ einnehmenden Bildschirmbereich mit dem Farbattribut ║
║ "COL" bzw stellt dort vorhandene Fenster wieder her.║
║ Die Subroutine "FREFEN" gibt den für das Fenster ║
║ allokierten Speicherbereich bzw. Filebereich wieder ║
║ frei. Beim Auftreten eines Fehlers wird eine ║
║ Meldung ausgegeben. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 87
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine FREFEN (NR,VSEG,FLAG) ║
║Die Subroutine gibt den durch ein Bildschirmfenster belegten ║
║Speicherplatz in der Memory bzw. in einem temporären File wieder frei║
║und entfernt alle Informationen über das Bildschirmfenster aus dem ║
║Verwaltungsfeld. In "VSEG" wird die Adresse dieses Verwaltungsfeldes ║
║übergeben. Sie wird für alle Zugriffe auf bis zu 30 im Verwaltungs- ║
║feld definierte Fenster durch Fensterroutinen benötigt. Die Nummer ║
║des zu löschenden Bildschirmfensters wird in der Variablen "NR" ║
║übergeben. Bei erfolgreicher Beendigung der Subroutine ist in "FLAG" ║
║eine Null, sonst eine Eins. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Nummer des aus der Memory zu entfernenden Bild- ║
║ schirmfensters [ 1 bis 30 ]. ║
║ Die Nummer steht für ein neu anzulegendes Bild- ║
║ schirmfensters wieder zur Verfügung. ║
║INTEGER Adresse des Verwaltungsfeldes. ║
║INTEGER Return: Fehlerflag ║
║ 0: Subroutine erfolgreich abgeschlossen. ║
║ 1: Ein Fehler ist aufgetreten. ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: FREMEM,GETMEM,PUTMEM ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: INTEGER H,B,ZEI,SP,VSEG,COL ║
║ DATA H/10/,B/20/,ZEI/1/,SP/1/,VSEG/0/,COL/23/ ║
║ CALL LOES (H,B,ZEI,SP,32,COL,0) ║
║ CALL RAHM (H,B,ZEI,SP,0,COL,0) ║
║ CALL PUTFEN (3,H,B,ZEI,SP,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL GETFEN (3,11,40,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL CLOFEN (3,VSEG,COL,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL FREFEN (3,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ RETURN ║
║ 1 WRITE(*,'(1X,A)') 'Fehler!' ║
║ Mit den Subroutinen "LOES" und "RAHM" wird ein ║
║ Bildschirmfenster aufgebaut, das mit der Subroutine ║
║ "PUTFEN" in die Memory bzw. in einen temporären ║
║ File ausgelagert wird. Mit der Subrouteine "GETFEN" ║
║ wird das gespeicherte Fenster an eine andere ║
║ Position des Bildschirms zurückgeschrieben. Die ║
║ Subroutine "CLOFEN" löscht den das Fenster ║
║ einnehmenden Bildschirmbereich mit dem Farbattribut ║
║ "COL" bzw stellt dort vorhandene Fenster wieder her.║
║ Die Subroutine "FREFEN" gibt den für das Fenster ║
║ allokierten Speicherbereich bzw. Filebereich wieder ║
║ frei. Beim Auftreten eines Fehlers wird eine ║
║ Meldung ausgegeben. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 88
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine INFFEN (NR,H,B,ZEI,SP,OP,SEG,VSEG,FLAG) ║
║Die Subroutine gibt die aktuellen Parameter eines Fensters mit der ║
║Nummer "NR" an das rufende Programm zurück. Die Informationen werden ║
║aus einem Verwaltungsfeld gelesen, das sich in der Memory befindet. ║
║In "H" und "B" werden die Höhe und die Breite des Fensters zurück- ║
║gegeben. "ZEI" und "SP" bezeichnen die Zeile und Spalte in der das ║
║Fenster bei der Bildschirmdarstellung beginnt. "OP" ist ein Indikator║
║für das Vorhandensein eines Fensters am Bildschirm. Wenn "OP" Null ║
║ist, ist das betreffende Fenster geschlossen. In "SEG" steht die ║
║Adresse, an der der Fensterinhalt gespeichert ist. Wenn "SEG" ║
║positiv ist, handelt es sich um eine Segmentadresse in der Memory. ║
║Eine negative Zahl bezeichnet die Satznummer in einer direct ║
║organisierten temporären Datei mit dem Unit 100, wenn in der Memory ║
║kein Speicherplatz für den Fensterinhalt zur Verfügung stand. Wenn ║
║das Fenster noch nicht existiert, steht in "SEG" eine Null. "VSEG" ║
║beinhaltet die Adresse des Verwaltungsfeldes, in dem aktuelle ║
║Informationen für bis zu 30 Bildschirmfenster gespeichert sind. In ║
║der Variablen "FLAG" wird bei erfolgreicher Beendigung der Subroutine║
║eine Null übergeben, sonst eine Eins. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Nummer des zu umrahmenden Bildschirmfensters ║
║ [ 1 bis 30 ]. Wenn die Nummer noch nicht durch ein ║
║ Bildschirmfenster belegt ist, wird die Routine mit ║
║ "FLAG" gleich Eins abgebrochen. ║
║ Durch die Nummer ist die Hirarchie der Bildschirm- ║
║ fenster festgelegt. ║
║INTEGER Return: Höhe des Bildschirmfensters in Zeilen. ║
║INTEGER Return: Breite des Bildschirmfensters in Spalten ║
║INTEGER Return: Erste Bildschirmzeile des Fensters. ║
║INTEGER Return: Erste Bildschirmspalte des Fensters. ║
║INTEGER Return: Indikator für das Vorhandensein des Fensters║
║ am Bildschirm. ║
║ 0: Fenster nicht am Bildschirm vorhanden ║
║ 1: Fenster am Bildschirm vorhanden ║
║INTEGER Return: Adresse an der der Fensterinhalt gespeichert║
║ ist. ║
║ Positiv: Segment in der Memory ║
║ Negativ: Satznummer in Datei Unit 100 ║
║INTEGER Adresse des Verwaltungsfeldes. ║
║INTEGER Return: Fehlerflag ║
║ 0: Subroutine erfolgreich abgeschlossen. ║
║ 1: Ein Fehler ist aufgetreten. ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: GETMEM ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: INTEGER FELD(12),VSEG,H,B,ZEI,SP,OP,SEG ║
║ OPEN (1,FILE='TEST',ACCESS='DIRECT', ║
║ -FORM='FORMATTED',RECL=72,STATUS='OLD') ║
║ CALL TEXFEN (2,12,3,20,1,1,23,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL RAMFEN (2,1,0,'Auswählen: <Esc>','NUM',VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ CALL GETFEN (2,5,10,VSEG,I) ║
Seite 89
║ IF (I .NE. 0) GOTO 1 ║
║ CALL INFFEN (2,H,B,ZEI,SP,OP,SEG,VSEG,I) ║
║ IF (I .NE. 0) GOTO 1 ║
║ RETURN ║
║ 1 WRITE(*,'(1X,A)') 'FEHLER' ║
║ Aus einer direct orgsanisierten Datei mit dem Unit 1║
║ werden mit Hilfe der Subroutine "TEXFEN" 12 Menü- ║
║ texte dreispaltig mit einer jeweiligen Länge von ║
║ 20 Characters und dem Farbattribut 23 im Fenster ║
║ Nummer 2 abgelegt. ║
║ Die Subroutine "RAMFEN" umgibt das Menüfeld im ║
║ Fenster mit einen einfachen Rahmen und schreibt in ║
║ die erste Zeile des Fensters eine Meldung. In die ║
║ letzte Zeile des Fensters wird außerdem die Nummer ║
║ des Fensters eingeblendet. Rahmen und Texte werden ║
║ in der vorhandenen Farbe dargestellt. ║
║ Die Subroutine "GETFEN" öffnet das Fenster mit dem ║
║ Menütext am Bildschirm ab der 5. Zeile und der 10. ║
║ Spalte. ║
║ "INFFEN" gibt die aktuellen Parameter des Fensters ║
║ an das rufende Programm zurück. ║
║ Wenn in einer Subroutine ein Fehler auftritt, wird ║
║ eine Fehlermeldung ausgegeben. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 90
Schriftengeneratoren
Manchmal ist es erwünscht, Hinweise in besonders auffälliger übergroßer
Schrift auf den Bildschirm zu schreiben. FORSUB.LIB stellt zwei
Blockschriften für diesen Zweck zur Verfügung. Beide Schriften sind
acht mal sieben Zeichenfelder groß. Die erste Schrift entspricht in
ihrer Form dem gerade aktivierten PC-Zeichensatz. Die zweite Schrift
ist filigraner als die erste, enthält aber nicht alle 256 Zeichen des
PC-Zeichensatzes. Mit diesen Schriften können drei Zeilen mit jeweils
zehn Zeichen auf dem Bildschirm positioniert werden.
In Systemen mit EGA- oder VGA-Konfiguration ist das Aktivieren von
User-Zeichensätzen möglich. Der in einer Script-Datei abgelegte
Zeichensatz wird dazu eingelesen. Die Zeichen des User-Zeichensatzes
stehen bis zum nächsten Wechsel des Videomodus, auch nach dem Beenden
des Programms, für alle Bildschirm-Ein- und Ausgaben zur Verfügung. Die
Höhe der Zeichen eines User-Zeichensatzes ist dabei variabel.
Zu den Utilities der FORTRAN-Library gehört ein Programm USERZ, mit
dessen Hilfe eigene Zeichensätze erstellt oder korrigiert werden können.
Vier fertige Zeichensätze sind ebenfalls in den Utilities enthalten.
Subroutinen zur Schriftengeneration
BLOCK a) Filigrane Blockschrift in ein Characterfeld schreiben
BLOCK1 a) PC-Zeichensatz äquivalente Blockschrift in ein
Characterfeld schreiben
SCBL a) Filigrane Blockschrift auf den Bildschirm schreiben
b) Filigrane Bockschrift mittenzentriert auf den Bildschirm
schreiben
c) PC-Zeichensatz äquivalente Blockschrift auf den Bildschirm
schreiben
d) PC-Zeichensatz äquivalente Bockschrift mittenzentriert auf
den Bildschirm schreiben
SCRIPT a) User-Zeichensatz für die Bildschirmausgabe aus einer
Scriptdatei laden
Seite 91
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine BLOCK (TEXT,ANZ,FELD) ║
║Die Subroutine füllt ein Characterfeld "FELD" mit einen Text aus ║
║Blocklettern der Größe 8 * 7 Zeichen. Der in Blocklettern zu ║
║konvertierende Text "TEXT" und die Anzahl der zu konvertierenden ║
║Zeichen "ANZ" werden übergeben. Die tatsächliche Zeilenlänge des ║
║Characterfeldes wird an das rufende Programm zurückgegeben. ║
║Kleingeschriebene Buchstaben werden in Großbuchstaben umgewandelt. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║CHARACTERSTRING Zu konvertierender Text [max. 10 Zeichen]. ║
║INTEGER Anzahl der zu konvertierenden Zeichen [1 bis 10] ║
║ Return: Zeilenlänge des Characterfeldes. ║
║CHARACTERFELD Return: Feld mit Blocklettern ║
║ [FELD(7) * (8*Anzahl Zeichen)] (z. B. FELD(7)*80). ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: UPCASE ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: CHARACTER FELD(7)*40 ║
║ CALL BLOCK ('Block',5,FELD) ║
║ Im Characterfeld "FELD" wird das Wort "BLOCK" in ║
║ Blocklettern zurückgegeben. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 92
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine BLOCK1 (TEXT,ANZ,FELD) ║
║Die Subroutine füllt ein Characterfeld "FELD" mit einen Text aus ║
║Blocklettern der Größe 8 * 7 Zeichen. Der in Blocklettern zu ║
║konvertierende Text "TEXT" und die Anzahl der zu konvertierenden ║
║Zeichen "ANZ" werden übergeben. Die tatsächliche Zeilenlänge des ║
║Characterfeldes wird an das rufende Programm zurückgegeben. ║
║Es werden die ersten 127 ASCII-Zeichen berücksichtigt. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║CHARACTERSTRING Zu konvertierender Text [max. 10 Zeichen]. ║
║INTEGER Anzahl der zu konvertierenden Zeichen [1 bis 10] ║
║ Return: Zeilenlänge des Characterfeldes. ║
║CHARACTERFELD Return: Feld mit Blocklettern ║
║ [FELD(7) * (8*Anzahl Zeichen)] (z. B. FELD(7)*80). ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: keine ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: CHARACTER FELD(7)*40 ║
║ CALL BLOCK1 ('Block',5,FELD) ║
║ Im Characterfeld "FELD" wird das Wort "Block" in ║
║ Blocklettern zurückgegeben. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 93
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine SCBL (TEXT,ANZ,ZEI,SP,HGZ,COL,ART) ║
║Die Subroutine schreibt einen Text mit Blocklettern der Größe 8 * 7 ║
║Zeichen positioniert auf den Bildschirm. Es besteht die Möglichkeit, ║
║den Text mittenzentriert darzustellen. ║
║Wenn "ART" kleiner 5 ist, wird eine filigrane Schrift verwendet, mit ║
║der sich aber nur Großbuchstaben darstellen lassen. "ART" größer oder║
║kleiner Null benutzt das Bitmuster des RAM-Zeichensatzes. Damit ║
║können die ersten 127 ASCII-Zeichen dargestellt werden. Die Schrift ║
║ist relativ grob. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║CHARACTERSTRING Zu konvertierender Text [max. 10 Zeichen]. ║
║INTEGER Anzahl der zu konvertierenden Zeichen [1 bis 10] ║
║INTEGER Erste Zeile der Darstellung [1 BIS 25]. ║
║INTEGER Erste Spalte der Darstellung [1 BIS 72]. ║
║ oder 100 für mittenzentrierte Darstellung. ║
║INTEGER Hintergrunddarstellung: ║
║ 0: Hintergund mit Blanks beschreiben ║
║ 1: Hintergrund mit ░ beschreiben ║
║ 2: Hintergrund mit ▒ beschreiben ║
║ 3: Hintergrund mit ▓ beschreiben ║
║ 4: Hintergrund mit █ beschreiben ║
║INTEGER Farbattribut; Siehe Anhang: "Farbattribute". Wenn ║
║ ein Monochrome-Monitor erkannt wird, erfolgt die ║
║ Darstellung im Schwarz/Weiß-Modus. ║
║ Bit 0 - 2: Vordergrundfarbe ║
║ Bit 3 : Intensität der Vordergrundfarbe ║
║ Bit 4 - 6: Hintergrundfarbe ║
║ Bit 7 : blinken ║
║INTEGER Art der Darstellung: ║
║ 0: filigraner Zeichensatz, normale Darstellung ║
║ 1: filigraner Zeichensatz, inverse Darstellung ║
║ 2: filigraner Zeichensatz, intensive Darstellung ║
║ 3: filigraner Zeichensatz, blinkende Darstellung ║
║ 4: filigraner Zeichensatz, intensiv/inv. Darstellung║
║ 5: ASCII-Zeichensatz, normale Darstellung ║
║ 6: ASCII-Zeichensatz, inverse Darstellung ║
║ 7: ASCII-Zeichensatz, intensive Darstellung ║
║ 8: ASCII-Zeichensatz, blinkende Darstellung ║
║ 9: ASCII-Zeichensatz, intensiv/invverse Darstellung ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: ATTRIB,BLOCK,BLOCK1,SCREEN ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: CALL SCBL ('Block',5,10,10,0,23,0) ║
║ Der Text "BLOCK" wird in Blocklettern ab der 10. ║
║ Zeile und der 10. Spalte in hellgrauer Farbe auf ║
║ blauem Hintergrund auf den Bildschirm gebracht. ║
║ Die Darstellung erfolgt normal, der Hintergrund wird║
║ mit Blanks beschrieben. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 94
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine SCRIPT (FILE,FLAG) ║
║Die Subroutine lädt einen Textzeichensatz für die Bildschirmausgabe. ║
║Der neue Textzeichensatz bleibt bis zum Setzen eines neuen Videomodus ║
║erhalten. Der neue Textzeichensatz wird aus einem Scriptfile ║
║eingelesen. Die Zeichenhöhe wird aus der Größe des Scriptfiles ║
║errechnet, die Zeichenbreite ist 8 Pixel. Die Subroutine führt bei ║
║allen vom Standard (14 Pixel Zeichenhöhe) abweichenden Zeichenhöhen ║
║eine automatische Cursor-Korrektur durch. Nach dem Setzen eines neuen ║
║Videomodus wird der Cursor in der Zeichenmitte angezeigt, da die ║
║Korrektur nicht rückgängig gemacht werden kann. Die Subroutine ║
║funktioniert nur in den Videotextmodi und wenn eine EGA- oder VGA- ║
║Karte vorhanden ist. Es stehen mehrere Scriptfiles zur Verfügung. ║
║In "FLAG" wird eine Null zurückgegeben, wenn die Subroutine erfolg- ║
║reich abschließt, sonst ein Fehlercode. Es kann gewählt werden, ob der║
║bisherige Bildschirminhalt erhalten bleiben soll oder nicht. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║CHARACTERSTRING Filename des Scriptfiles. Es ist möglich, einen Path ║
║ mit zu übergeben. Das letzte Zeichen im String muß ║
║ ein Nullcharacter sein. ║
║INTEGER Löschflag: ║
║ 0: Bildschirminhalt erhalten ║
║ 1: Bildschirminhalt löschen ║
║ Return: Fehlerflag: ║
║ 0: Routine erfolgreich beendet ║
║ 1: Keine hochauflösende Graphikkarte vorhanden ║
║ 2: Kein Textmodus eingeschaltet ║
║ 3: Aktiver Monitor nicht an der hochauflösenden ║
║ Graphikkarte angeschlossen ║
║ 4: Fehler beim Öffnen der Script-Datei ║
║ 5: Fehler beim Lesen der Script-Datei ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiel: I=0 ║
║ CALL SCRIPT ('C:\SCR24'//CHAR(0),I) ║
║ Der Scriptfile SCR24 wird aus der Root des Laufwerks ║
║ C: eingelesen. Alle bis zum nächsten Wechsel des ║
║ Videomodus auf den Bildschirm ausgegebenen Zeichen ║
║ entsprechen dem in SCR24 enthaltenen Textzeichensatz.║
║ Der Inhalt des Bildschirms wird nicht gelöscht. ║
║ In "I" steht eine Null, wenn die Routine mit Erfolg ║
║ beendet wurde. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 95
Zeit- und Akustiksteuerung
Es ist sinnvoll, Hinweise und Warnungen, die am Bildschirm ausgegeben
werden, akustisch hervorzuheben. In FORSUB.LIB gibt es dazu eine
Subroutine, die es gestattet, einen Ton mit vorgegebener Frequenz und
Zeitdauer zu erzeugen. Ein Programm kann mit einer anderen Subroutine
für eine bestimmte Zeitspanne unterbrochen werden, um Hinweise,
Warnungen oder Programmoutputs eine Weile am Bildschirm zu erhalten.
Subroutinen zur Zeit und Akustiksteuerung
LAUT a) Ton variabler Frequenz und Zeitdauer erzeugen (Parameter in
PC-Zeiteinheiten)
b) Pause mit variabler Zeitdauer erzeugen (Parameter in
PC-Zeiteinheiten)
PIEPS a) Ton variabler Frequenz und Zeitdauer erzeugen (Parameter in
Real-Sekunden und Integer-Hertz)
PAUS a) Pause variabler Zeitdauer erzeugen (Parameter in Integer-
Sekunden)
b) Pause bis zum nächsten Tastendruck erzeugen
Seite 96
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine LAUT (FREQ,ZEIT,ART) ║
║Die Subroutine erzeugt je nach dem in ART übergebenen Flag einen Ton ║
║vorgegebener Frequenz und Zeitdauer oder eine Pause im Programmablauf ║
║mit vorgegebener Zeitdauer. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Faktor für die Tonfrequenz [ 1193180/Hertz ]. ║
║INTEGER Faktor für die Zeitdauer [ Sekunden/0.055 ]. ║
║INTEGER Flag für die Arbeitsart: ║
║ 0: Ton erzeugen ║
║ 1: Pause erzeugen ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiele: CALL LAUT (1491,55,0) ║
║ Es wird ein drei Sekunden langer Ton mit einer ║
║ Frequenz von 800 Hertz erzeugt. ║
║ CALL LAUT (0,4,1) ║
║ Der Programmablauf wird für 0.22 Sekunden ║
║ unterbrochen. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 97
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine PIEPS (FREQ,DAUER) ║
║Die Subroutine erzeugt einen Ton mit der Frequenz FREQ und der ║
║Zeitdauer DAUER. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Frequenz des Tones in Hertz ║
║REAL Zeitdauer des Tones in Sekunden. ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: LAUT ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: CALL PIEPS (1250,0.3) ║
║ Es wird ein 0.3 Sekunden dauernder Ton mit einer ║
║ Frequenz von 1250 Hertz erzeugt. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 98
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine PAUS (N) ║
║Wenn N positiv ist, erzeugt die Subroutine eine N Sekunden lange ║
║Pause. Wenn N negativ ist, wird das Programm bis zum Betätigen einer ║
║beliebigen Taste unterbrochen. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Dauer der Pause in Sekunden bzw. Indikator für den ║
║ Wartestatus bis zum Betätigen einer Taste. ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: LAUT,TAST ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiele: CALL PAUS (10) ║
║ Es wird eine Pause von 10 Sekunden generiert. ║
║ CALL PAUS (-1) ║
║ Der Programmablauf wird bis zum Betätigen einer ║
║ beliebigen Taste unterbrochen. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 99
Transformationen
Häufig benötigte Umwandlungen von einem Format in ein anderes sind mit
Subroutinen in FORSUB.LIB automatisiert. Dazu gehören das Erzeugen
alternativer Farbattribute mit automatischer Anpassung an die
Videokonfiguration, Umwandlungen von Maschinenadressen, Datums- und
Zeitformaten. Das Umwandeln von Strings in Integers und von Integers
in Strings ist zwar mit der "WRITE"-Routine aus der Standardbibliothek
möglich, jedoch sind die FORSUB-Routinen sehr viel schneller.
Subroutinen für Transformationen
ATTCOL a) Farbattribute der Videokonfiguration anpassen
ATTRIB a) Alternative Farbattribute erzeugen und der Videokonfiguration
anpassen
ADRESS a) Maschinenadresse in Segment und Offset aufteilen
DTRAN a) Characterformat eines Datums in das Integerformat umwandeln
b) Integerformat eines Datums in das Characterformat umwandeln
ZTRAN a) Characterformat einer Zeitangabe in das Integerformat
umwandeln
b) Integerformat einer Zeitangabe in das Characterformat
umwandeln
AITRAN a) Characterstring in mehrere Integers umwandeln
IATRAN a) Integer in Characterstring umwandeln
Seite 100
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine ATTCOL (COL) ║
║Die Subroutine stellt fest, ob eine Farb- oder Monochromekonfiguration║
║vorhanden ist und stellt das Farbattribut gegebenenfalls auf die für ║
║Monochromekonfigurationen geeignete Form ein. Das Intensitäts- und das║
║Blinkbit bleiben dabei unverändert. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Farbattribut; Siehe Anhang: "Farbattribute". Wenn ein║
║ Monochrome-Monitor erkannt wird, erfolgt eine ║
║ Umwandlung in ein dafür geeignetes Attribut. ║
║ Bit 0 - 2: Vordergrundfarbe ║
║ Bit 3 : Intensität der Vordergundfarbe ║
║ Bit 4 - 6: Hintergrundfarbe ║
║ Bit 7 : blinken ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiele: INTEGER COL/23/ ║
║ CALL ATTCOL (COL) ║
║ Das Farbattribut 23 (grau auf blau) wird bei der ║
║ Verwendung eines Monochrome-Monitors in das Farb- ║
║ attribut 7 (hellgrau auf schwarz) umgewandelt. Bei ║
║ Farbmonitoren bleibt das ursprüngliche Attribut 23 ║
║ erhalten. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 101
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine ATTRIB (COL,INV,BOLD,BLINK,BOIN) ║
║Die Subroutine konvertiert das in COL übergebene Farbattribut in je ║
║ein inverses, reziprok-intensives, blinkendes und reziprok- ║
║intensiv/inverses Attribut. Wenn die Subroutine feststellt, daß ein ║
║Monochromebildschirm angeschlossen ist, wird das Farbattribut COL ║
║hellgrau auf schwarz gesetzt. Die restlichen Attribute werden ║
║entsprechend gesetzt. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Farbattribut normal. ║
║ Bit 0 - 2: Vordergrundfarbe ║
║ Bit 3 : Intensität der Vordergrundfarbe ║
║ Bit 4 - 6: Hintergrundfarbe ║
║ Bit 7 : blinken ║
║ Return: Farbattribut hellgrau auf schwarz wenn ein ║
║ Monochromemonitor festgestellt wurde. ║
║INTEGER Return: Farbattribut inverse. ║
║INTEGER Return: Farbattribut reziprok-intensive. ║
║INTEGER Return: Farbattribut blinkend. ║
║INTEGER Return: Farbattribut reziprok-intensiv/inverse. ║
╟──────────────────────────────────────────────────────────────────────╢
║Subroutinen: ATTCOL ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiel: CALL ATTRIB (23,I,J,K,L) ║
║ Aus dem Farbattribut 23 (hellgrau auf blau) werden in║
║ den Variablen das inverse, das reziprok-intensive, ║
║ das blinkende und das reziprok-intensiv/inverse ║
║ Farbattribut erzeugt und an das rufende Programm ║
║ übergeben. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 102
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine ADRESS (ADDR,SEG,OFF) ║
║Die Subroutine ermittelt aus einer Maschinenadresse im Integer-4- ║
║Format das Segment und das Offset und übergibt diese in zwei ║
║Integer-4-Variablen. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Maschinenadresse im Integer-4-Format (z.B. aus der ║
║ Function LOC(Variable) ). ║
║INTEGER Return: Segment der Adresse. ║
║INTEGER Return: Offset der Adresse. ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: keine ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: INTEGER ADDR,SEG,OFF ║
║ REAL VARIAB ║
║ CALL ADRESS (LOC(VARIAB),SEG,OFF) ║
║ In SEG und OFF werden Segment und Offset der ║
║ Maschinenadresse zurückgegeben, an der der Inhalt ║
║ der Real-Variablen VARIAB gespeichert ist. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 103
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine DTRAN (IDAT,CDAT,ART) ║
║Die Subroutine wandelt ein Datum im Stringformat der Form ║
║"TT.MM.JJJJ" in ein Integerformat der Form "JJJJMMTT" um, wenn in ║
║"ART" eine 1 übergeben wird. Wenn "ART" 0 ist, erfolgt die Wandlung ║
║vom Integerformat ins Characterformat. Wenn bei der Wandlung ein ║
║Fehler auftritt, wird "0" bzw. "##########" zurückgegeben. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Datum in der Form JJJJMMTT. ║
║ Return (ART=1): Datum in der Form JJJJMMTT. ║
║CHARACTERSTRING Datum in der Form TT.MM.JJJJ. [10 Characters] ║
║ Return (ART=0): Datum in der Form TT.MM.JJJJ. ║
║INTEGER Indikator für die Art der Umwandlung [0 oder 1]. ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: CHARACTER DAT*10 ║
║ CALL DTRAN (19890817,DAT,0) ║
║ Im String "DAT" steht nun "17.08.1989". ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 104
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine ZTRAN (IZEIT,CZEIT,ART) ║
║Die Subroutine wandelt die Zeit im Stringformat der Form ║
║"HH.MM.SS" in ein Integerformat der Form "HHMMSS" um, wenn in "ART" ║
║eine 1 übergeben wird. Wenn "ART" 0 ist, erfolgt die Wandlung vom ║
║Integerformat ins Characterformat. Wenn bei der Wandlung ein ║
║Fehler auftritt, wird "0" bzw. "########" zurückgegeben. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Zeit in der Form HHMMSS. ║
║ Return (ART=1): Zeit in der Form HHMMSS. ║
║CHARACTERSTRING Zeit in der Form HH.MM.SS. [10 Characters] ║
║ Return (ART=0): Zeit in der Form HH.MM.SS. ║
║INTEGER Indikator für die Art der Umwandlung [0 oder 1]. ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: CHARACTER ZT*10 ║
║ CALL ZTRAN (162200,ZT,0) ║
║ Im String "ZT" steht nun "16.22.00". ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 105
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine AITRAN (STRING,IFELD,PFELD,FLAG) ║
║Die Subroutine transformiert einen Characterstring aus Ziffern in ║
║Integers. Die Integers, deren Längen in "PFELD" eingetragen sind, ║
║werden in "IFELD" an das rufende Programm zurückgegeben. Wenn ║
║ungültige Zeichen im String gefunden werden oder eine Längenangabe ║
║ungültig ist, wird die Subroutine mit "FLAG" gleich Eins abgebrochen. ║
║Wenn die Subroutine mit Erfolg abgeschlossen wird, steht in "FLAG" ║
║eine Null. Blanks im String werden als Nullen interpretiert, Minus- ║
║und Pluszeichen sind zugelassen. Das letzte Zeichen im String muß ║
║ein Nullcharacter sein. Das Lesen von Integers aus einem String ist ║
║auch mit der READ-Anweisung möglich, AITRAN sollte aber eingesetzt ║
║werden, wenn es auf hohe Verarbeitungsgeschwindigkeit ankommt. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║CHARACTERSTRING [ZIFFERN, PLUS UND MINUSZEICHEN, BLANKS]//CHAR(0) ║
║INTEGERFELD Feld mit Längenangaben der aus dem String zu lesenden║
║ Integers (1 BIS 10) ║
║INTEGERFELD Return: Feld mit aus dem String gelesenen Integers. ║
║INTEGER Return: Fehlerflag: ║
║ 0: Routine mit Erfolg beendet ║
║ 1: Ein Fehler ist aufgetreten! ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiel: CHARACTER STRING*16 ║
║ INTEGER ZAHL(6),LANG(6) ║
║ DATA LANG /2,2,2,2,1,6/ ║
║ STRING='1234567890-23456'//CHAR(0) ║
║ CALL AITRAN (STRING,LANG,ZAHL,I) ║
║ IF (I .NE. 0) THEN ║
║ WRITE (*'(1X,A)') 'Fehler!' ║
║ ELSE ║
║ WRITE (*'(4(I3),I2,I7)') ZAHL ║
║ ENDIF ║
║ Die Subroutine liest aus dem String "STRING" sechs ║
║ Integers mit den in "LANG" übergebenen Längen aus. ║
║ Wenn ein Fehler auftritt, wird eine Meldung ║
║ ausgegeben, sonst werden die gelesenen Zahlen auf den║
║ Bildschirm geschrieben. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 106
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine IATRAN (IWERT,AWERT,ALANG,FLAG) ║
║Die Subroutine transformiert eine Integerzahl IWERT in einen ║
║Characterstring AWERT. Die Länge des übergebenen Characterstrings ║
║wird in ALANG übergeben. Die Integerzahl wird im String rechtsbündig ║
║abgelegt; nicht benötigte Stellen werden linksbündig mit Blanks ║
║überschrieben. Wenn ein Fehler auftritt, weil z. B. der übergebene ║
║String zu klein ist, wird die Routine mit FLAG gleich 1 abgeschlossen,║
║sonst steht darin eine Null. Das Umformen von Integers in Strings ist ║
║auch mit der WRITE-Anweisung möglich, IATRAN sollte aber eingesetzt ║
║werden, wenn es auf hohe Verarbeitungsgeschwindigkeit ankommt. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER In ASCII-Zeichen umzuformender Integer-Wert. ║
║CHARACTER Return: String mit in ASCII-Zeichen umgeformten ║
║ Integerwert [max 128 Byte lang!] ║
║INTEGER Länge des übergebenen Strings AWERT in Byte [MAX 128]║
║INTEGER Return: Fehlerflag: ║
║ 0: Routine mit Erfolg beendet ║
║ 1: Ein Fehler ist aufgetreten! ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiel: CHARACTER STRING*16 ║
║ CALL IATRAN (-123456,STRING,16,I) ║
║ IF (I .NE. 0) THEN ║
║ WRITE (*'(1X,A)') 'Fehler!' ║
║ ELSE ║
║ WRITE (*,'(1X,A16)') STRING ║
║ ENDIF ║
║ Die Subroutine schreibt die Zahl -123456 rechts- ║
║ bündig in der Form " -123456" in den String. ║
║ Wenn ein Fehler auftritt, wird eine Meldung ║
║ ausgegeben, sonst wird der String am Bildschirm ║
║ ausgegeben. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 107
Zufallzahlen und Sortierungen
Zufallzahlen sind nie wirklich zufällig; sie unterliegen gewöhnlich
einer mathematischen Gesetzmäßigkeit. Schließlich werden sie ja durch
einen mathematischen Algorithmus erzeugt. FORSUB.LIB enthält eine
Subroutine zur Erzeugung von Zufallzahlen, bei der der mathematische
Algorithmus so weit gefächert ist, daß die damit erzeugten Zahlen so gut
wie zufällig sind. Dadurch benötigt die Subroutine allerdings auch
relativ viel Zeit für ihre Ausführung.
In FORSUB.LIB sind Subroutinen zur Sortierung von Feldern der
verschiedenen Datentypen enthalten. Je nach Bedarf kann steigend oder
fallend sortiert werden.
Subroutinen für Sortierungen und zur Erzeugung von Zufallzahlen
ZUFALL a) Zufallzahl innerhalb vorgegebener Schranken erzeugen
ZUFAFE a) Feld mit mehrdeutigen Zufallzahlen innerhalb vorgegebener
Schranken erzeugen
b) Feld mit eindeutigen Zufallzahlen innerhalb vorgegebener
Schranken erzeugen
ISORT a) Integerwerte steigend sortieren
b) Integerwerte fallend sortieren
RSORT a) Realwerte steigend sortieren
b) Realwerte fallend sortieren
ASORT a) Characterstrings alphanumerisch steigend sortieren
b) Characterstrings alphanumerisch fallend sortieren
Seite 108
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine ZUFALL (WERT,USCH,OSCH) ║
║Die Subroutine erzeugt eine Zufallzahl, die inerhalb der oberen ║
║Schranke OSCH und der unteren Schranke USCH liegt. Die zu erzeugende ║
║Zufallzahl kann zwischen 0 und 999999 plus dem Wert der unteren ║
║Schranke liegen. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Return: Zufallzahl. ║
║INTEGER untere Schranke (kleinstmögliche Zufallzahl) ║
║ [ 0 bis 999999 ]. ║
║INTEGER obere Schranke (größtmögliche Zufallzahl) ║
║ [ 1 bis 999999+USCH ]. ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: PIKE,GETTIM ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: CALL ZUFALL (I,1,49) ║
║ Die Routine erzeugt eine Zufallzahl zwischen 1 und ║
║ 49 und speichert sie in der Variablen I. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 109
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine ZUFAFE (FELD,ANZ,USCH,OSCH,ART) ║
║Die Subroutine füllt ein Integerfeld FELD mit ANZ Zufallzahlen, die ║
║zwischen der oberen Schranke OSCH und der unteren Schranke USCH ║
║liegen. Die Zufallzahlen können zwischen 0 und 999999 plus dem Wert ║
║der unteren Schranke liegen. Mit ART wird angegeben, ob Zufallzahlen ║
║ein- oder mehrfach im Integerfeld vorkommen dürfen. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGERFELD Return: Zufallzahlen [ FELD(ANZ) ]. ║
║INTEGER Anzahl der zu ermittelnden Zufallzahlen. ║
║INTEGER untere Schranke (kleinstmögliche Zufallzahl) ║
║ [ 0 bis 999999 ]. ║
║INTEGER obere Schranke (größtmögliche Zufallzahl) ║
║ [ 1 bis 999999+USCH ]. ║
║INTEGER Belegungsart: 0: Zufallzahlen dürfen mehrfach ║
║ vorkommen. ║
║ 1: Zufallzahlen dürfen jeweils nur ║
║ einmal vorkommen ║
║ Return: -1: Wenn ein Fehler aufgetreten ist ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: PEEK,GETTIM ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: INTEGER FLED(6) ║
║ CALL ZUFAFE (FELD,6,1,49,1) ║
║ Die Routine erzeugt sechs Zufallzahlen zwischen 1 ║
║ und 49 und speichert sie im Integerfeld FELD. Jede ║
║ Zufallzahl kommt dabei nur einmal vor. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 110
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine ASORT (ANZ,FELD,ART) ║
║Die Subroutine sortiert "ANZ" Characterstrings in einem Feld "FELD". ║
║Wenn in "ART" eine Null übergeben wird, erfolgt die Sortierung ║
║alphanumerisch steigend, wenn eine Eins übergeben wird, erfolgt die ║
║Sortierung alphanumerisch fallend. Die alphanumerische Reihenfolge ║
║entspricht der ASCII-Codetabelle. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Anzahl der zu sortierenden Strings ║
║CHARACTERFELD Feld mit zu sortierenden Strings in der Form ║
║ [ FELD(ANZ)*(*) ]. ║
║INTEGER Art der Sortierung: 0: steigende Sortierung ║
║ 1: fallende Sortierung ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: keine ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: CHARACTER FELD(100)*1 ║
║ DO 1 I=1,100 ║
║ CALL ZUFALL (CHAR(FELD(I)),0,256) ║
║ 1 CONTINUE ║
║ CALL ASORT (100,FELD,0) ║
║ Es werden einhundert zufällig erzeugte Zeichen ║
║ im Feld "FELD" aufsteigend sortiert. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 111
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine ISORT (ANZ,FELD,ART) ║
║Die Subroutine sortiert "ANZ" Integerwerte in einem Wertefeld "FELD".║
║Wenn in "ART" eine Null übergeben wird, erfolgt die Sortierung ║
║steigend, wenn eine Eins übergeben wird, erfolgt die Sortierung ║
║fallend. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Anzahl der zu sortierenden Werte. ║
║INTEGERFELD Feld mit zu sortierenden Integers in der Form ║
║ [ FELD(ANZ) ]. ║
║INTEGER Art der Sortierung: 0: steigende Sortierung ║
║ 1: fallende Sortierung ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: keine ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: INTEGER FELD(100) ║
║ DO 1 I=1,100 ║
║ CALL ZUFALL (FELD(I),0,1000000) ║
║ 1 CONTINUE ║
║ CALL ISORT (100,FELD,0) ║
║ Es werden einhundert zufällig erzeugte Integers ║
║ im Feld "FELD" aufsteigend sortiert. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 112
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine RSORT (ANZ,FELD,ART) ║
║Die Subroutine sortiert "ANZ" Realwerte in einem Wertefeld "FELD". ║
║Wenn in "ART" eine Null übergeben wird, erfolgt die Sortierung ║
║steigend, wenn eine Eins übergeben wird, erfolgt die Sortierung ║
║fallend. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Anzahl der zu sortierenden Werte. ║
║REALFELD Feld mit zu sortierenden Reals in der Form ║
║ [ FELD(ANZ) ]. ║
║INTEGER Art der Sortierung: 0: steigende Sortierung ║
║ 1: fallende Sortierung ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: keine ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: REAL FELD(100) ║
║ DO 1 I=1,100 ║
║ CALL ZUFALL (J,0,10000000) ║
║ FELD(I)=J/100.0 ║
║ 1 CONTINUE ║
║ CALL RSORT (100,FELD,0) ║
║ Es werden einhundert zufällig erzeugte Realwerte ║
║ im Feld "FELD" aufsteigend sortiert. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 113
Stringmanipulationen
Unter Stringmanipulationen versteht man Veränderungen in Textstrings,
die alle darin enthaltenen Zeichen oder bestimmte Zeichenketten
betreffen. FORSUB.LIB bietet die gebräuchlichsten Subroutinen zur
Stringmanipulation, die dem Programmierer viel Arbeit abnehmen. Jede
Subroutine kann Strings bis zu zweihundert Zeichen Länge verarbeiten.
Die Verwendung von Substrings ist dabei möglich. Für den Eingabestring
und den Ausgabestring, der das Ergebnis der Stringmanipulation enthält,
darf die selbe Variable verwendet werden, wodurch aufwendige
Umspeicherungen vermieden werden.
Subroutinen für Stringmanipulationen
ANZAHL a) Anzahl der Worte in einer Zeichenkette feststellen
CHANGE a) Zeichenketten gegen andere Zeichenketten in einem Textstring
austauschen
CHAWAL a) Verschiedene Zeichen gegen andere Zeichen in einem Textstring
austauschen
b) Verschiedene Zeichen aus dem Textstring entfernen
CHAZEI a) Gruppen von Zeichen gegen ein anderes Zeichen in einem
Textstring austauschen
DEHN a) Textstring durch Vervielfachen der darin enthaltenen
Leerstellen auf eine vorgegebene Länge dehnen
DELETE a) Zeichenketten aus einem Textstring entfernen
FUEG a) Zeichenketten positioniert in einem String einfügen
GETWOR a) Wort mit vorgegebener Nummer aus einem String lesen
LAENGE a) Position des letzten Zeichens in einem Textstring ermitteln
NEXT a) Position des nächsten Wortes ab einer vorgegebenen Position
im Textstring ermitteln
POSIT a) Position des erstmaligen Auftretens einer Zeichenkette in
einem Textstring ermitteln
b) Position des letztmaligen Auftretens einer Zeichenkette in
einem Textstring ermitteln
TXCODE a) Textstring mit Hilfe einer Codetabelle verschlüsseln
b) Textstring mit Hilfe einer Codetabelle entschlüsseln
RECHTS a) Text in einer Character-Variablen rechtsbündig formatieren
UPCASE a) Kleinbuchstaben eines Textstrings in Großbuchstaben umwandeln
WOSUCH a) Nummer eines Wortes in einem Textstring ermitteln
ZAHL a) Equivalenz eines Textstrings zum Integer- oder Realformat
testen
Seite 114
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine ANZAHL (IN,ANZ) ║
║Die Subroutine stellt die Anzahl der in einem String "IN" vorhandenen║
║Worte fest und gibt sie in "ANZ" an das rufende Programm zurück. Die ║
║Characters Null [CHAR(0)] und Blank werden dabei als Separator ║
║gewertet. Der String "IN" darf eine Länge von maximal 200 Zeichen ║
║haben. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║CHARACTERSTRING Eingabestring [max. 200 Zeichen]. ║
║INTEGER Return: Anzahl der gefundenen Worte ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: CHARACTER IN*100 ║
║ IN='Zu bearbeitender String: ANZAHL.FOR' ║
║ CALL ANZAHL (IN,IANZ) ║
║ In der Variablen "IANZ" wird der Wert 4 als Anzahl ║
║ der gefundenen Worte zurückgegeben. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 115
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine CHANGE (IN,STRIN,OUT,STROUT) ║
║Die Subroutine kopiert den String "IN" in den String "OUT". Dabei ║
║werden Zeichenketten "STRIN" gegen Zeichenketten "STROUT" ║
║ausgetauscht. ║
║Alle Strings dürfen eine Länge von maximal 200 Zeichen haben. Die ║
║Strings "STRIN" und "STROUT" dürfen nicht als Substrings übergeben ║
║werden. Es ist möglich, für die Strings "IN" und "OUT" dieselbe ║
║Variable zu verwenden. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║CHARACTERSTRING Eingabestring [max. 200 Zeichen]. ║
║CHARACTERSTRING Zeichenkette, die ausgetauscht werden soll ║
║ [max. 200 Zeichen]. ║
║CHARACTERSTRING Return: Ausgabestring [max. 200 Zeichen]. ║
║CHARACTERSTRING Zeichenkette, gegen die ausgetauscht werden soll ║
║ [max. 200 Zeichen]. ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: LAENGE ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: CHARACTER IN*100,OUT*80 ║
║ IN='Zu suchende Datei: CHANGE.FOR' ║
║ CALL CHANGE (IN,'FOR',OUT,'EXE') ║
║ Der Text in der Variablen "OUT" ist nun: ║
║ "Zu suchende Datei: CHANGE.EXE". ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 116
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine CHAWAL (IN,STRIN,OUT,STROUT) ║
║Die Subroutine kopiert den String "IN" in den String "OUT". Dabei ║
║werden alle in "STRIN" vorkommenden Zeichen gegen die in "STROUT" an ║
║der gleichen Position stehenden Zeichen ausgetauscht. Zeichen, für ║
║die in "STROUT" kein Äquivalent vorhanden ist, werden nur gelöscht. ║
║Die Strings dürfen eine Länge von maximal 200 Zeichen haben. ║
║Es ist möglich, für die Strings "IN" und "OUT" dieselbe Variable zu ║
║verwenden. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║CHARACTERSTRING Eingabestring [max. 200 Zeichen]. ║
║CHARACTERSTRING String mit auszutauschenden Zeichen ║
║ [max. 200 Zeichen]. ║
║CHARACTERSTRING Return: Ausgabestring [max. 200 Zeichen]. ║
║CHARACTERSTRING String mit Zeichen, gegen die ausgetauscht werden ║
║ soll [max. 200 Zeichen]. ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: LAENGE ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: CHARACTER IN*100,OUT*80 ║
║ IN='Zu suchende Datei: CHAWAL.FOR' ║
║ CALL CHAWAL (IN,'uei',0UT,'*#') ║
║ Der Text in der Variablen "OUT" ist nun: ║
║ "Z* s*ch#nd# Dat#: CHAWAL.FOR". ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 117
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine CHAZEI (IN,ZEIKL,ZEIGR,OUT,ZEICHA) ║
║Die Subroutine kopiert den String "IN" in den String "OUT". Dabei ║
║werden Zeichen größer/gleich "ZEIKL" und kleiner/gleich "ZEIGR" gegen║
║das Zeichen "ZEICHA" ausgetauscht. Wenn "ZEICHA" das Zeichen Null ║
║[CHAR(0)] ist, wird das gefundene Zeichen nur gelöscht. ║
║Die Strings "IN" und "OUT" dürfen eine Länge von maximal 200 Zeichen ║
║haben. "ZEIKL" muß lexikaligraphisch kleiner als "ZEIGR" sein. ║
║"ZEIKL", "ZEIGR" und "ZEICHA" dürfen nur ein Zeichen lang sein. ║
║Es ist möglich, für die Strings "IN" und "OUT" diselbe Variable zu ║
║verwenden. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║CHARACTERSTRING Eingabestring [max. 200 Zeichen]. ║
║CHARACTER Kleinstes auzutauschendes Zeichen. ║
║CHARACTER Größtes auszutauschendes Zeichen. ║
║CHARACTERSTRING Return: Ausgabestring [max. 200 Zeichen]. ║
║CHARACTER Zeichen, gegen das ausgetauscht werden soll oder ║
║ Null [CHAR (0)] wenn nur gelöscht werden soll. ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: LAENGE ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: CHARACTER IN*100,OUT*80 ║
║ IN='Zu suchende Datei: CHAZEI.FOR' ║
║ CALL CHAZEI (IN,'A','E',OUT,'*') ║
║ Der Text in der Variablen "OUT" ist nun: ║
║ "Zu suchende *atei: *H*Z*I.*X*". ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 118
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine DEHN (IN,OUT,LAN) ║
║Die Subroutine kopiert den String "IN" in den String "OUT". Dabei ║
║werden die in "IN" enthaltenen Leerzeichen sooft vervielfacht, bis ║
║das letzte Zeichen an der Position "LAN" steht. Wenn die Länge von ║
║"IN" kleiner als 75% von "LAN" ist, wird "IN" unverändert in "OUT" ║
║kopiert. ║
║Es ist möglich, für die Strings "IN" und "OUT" diselbe Variable zu ║
║verwenden. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║CHARACTERSTRING Eingabestring [max. 200 Zeichen]. ║
║CHARACTERSTRING Return: Ausgabestring [max. 200 Zeichen]. ║
║INTEGER Position, an der das letzte Zeichen stehen soll ║
║ [max. 200]. ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: CHARACTER IN*100,OUT*80 ║
║ IN='Zu suchende Datei: DEHN.FOR' ║
║ CALL DEHN (IN,OUT,35) ║
║ Der Text in der Variablen "OUT" ist nun: ║
║ "Zu suchende Datei: DEHN.FOR". ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 119
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine DELETE (IN,OUT,STRIN) ║
║Die Subroutine kopiert den String "IN" in den String "OUT". Dabei ║
║werden Zeichenketten "STRIN" herausgefiltert. ║
║Alle Strings dürfen eine Länge von maximal 200 Zeichen haben. Der ║
║String "STRIN" darf nicht als Substring übergeben werden. Es ist ║
║möglich, für die Strings "IN" und "OUT" dieselbe Variable zu ║
║verwenden. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║CHARACTERSTRING Eingabestring [max. 200 Zeichen]. ║
║CHARACTERSTRING Return: Ausgabestring [max. 200 Zeichen]. ║
║CHARACTERSTRING Zeichenkette, die herausgefiltert werden soll ║
║ [max. 200 Zeichen]. ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: LAENGE ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: CHARACTER IN*100,OUT*80 ║
║ IN='Zu suchende Datei: DELETE.FOR' ║
║ CALL DELETE (IN,OUT,'Datei') ║
║ Der Text in der Variablen "OUT" ist nun: ║
║ "Zu suchende : DELETE.FOR". ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 120
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine FUEG (IN,STRIN,OUT,POS) ║
║Die Subroutine kopiert den String "IN" in den String "OUT". Dabei ║
║wird die Zeichenkette "STRIN" hinter der Position "POS" eingefügt. ║
║Alle Strings dürfen eine Länge von maximal 200 Zeichen haben. Der ║
║String "STRIN" darf nicht als Substring übergeben werden. Es ist ║
║möglich, für die Strings "IN" und "OUT" dieselbe Variable zu ║
║verwenden. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║CHARACTERSTRING Eingabestring [max. 200 Zeichen]. ║
║CHARACTERSTRING Zeichenkette, die eingefügt werden soll ║
║ [max. 200 Zeichen]. ║
║CHARACTERSTRING Return: Ausgabestring [max. 200 Zeichen]. ║
║INTEGER Position, hinter die eingefügt werden soll ║
║ [max. 199]. ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: CHARACTER IN*100,OUT*80 ║
║ IN='Zu suchende Datei: FUEG.FOR' ║
║ CALL FUEG (IN,'FORTRAN-',OUT,12) ║
║ Der Text in der Variablen "OUT" ist nun: ║
║ "Zu suchende FORTRAN-Datei: FUEG.FOR". ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 121
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine GETWOR (IN,ANZ,STROUT) ║
║Die Subroutine schreibt das in "ANZ" angeforderte Wort aus der ║
║Zeichenkette "IN" in die Variable "STROUT". Die Strings dürfen eine ║
║Länge von maximal 200 Zeichen haben. Die Nummer des gewünschten ║
║Wortes wird in "ANZ" übergeben. Wenn die Anzahl Wörter in "IN" nicht ║
║vorhanden ist, wird in "ANZ" 0 zurückgegeben. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║CHARACTERSTRING Eingabestring [max. 200 Zeichen]. ║
║INTEGER Wortzähler ║
║ Return: 0 wenn Anzahl Wörter nicht vorhanden ist ║
║CHARACTERSTRING Return: Gesuchtes Wort [max. 200 Zeichen] ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: FUEG,POSIT,NEXT ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: CHARACTER IN*100,STROUT*40 ║
║ IN='Zu suchende Datei: GETWOR.FOR' ║
║ CALL GETWOR (IN,3,STROUT) ║
║ In der Variablen "STROUT" wird der Text "Datei" ║
║ zurückgegeben. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 122
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine LAENGE (IN,LAN) ║
║Die Subroutine stellt die Position des letzten Zeichens in "IN" fest ║
║und gibt sie in "LAN" an das rufende Programm zurück. Die Characters ║
║Null [CHAR(0)] und Blank werden dabei nicht als Zeichen gewertet. ║
║Der String "IN" darf eine Länge von maximal 200 Zeichen haben. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║CHARACTERSTRING Eingabestring [max. 200 Zeichen]. ║
║INTEGER Return: Position des letzten Zeichens ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: CHARACTER IN*100 ║
║ IN='Zu suchende Datei: LAENGE.FOR ' ║
║ CALL LAENGE (IN,IPOS) ║
║ In der Variablen "IPOS" wird der Wert 29 als ║
║ Position des letzten Zeichens zurückgegeben. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 123
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine NEXT (IN,POS) ║
║Die Subroutine stellt die Position des nächsten Wortes in einer ║
║Zeichenkette "IN" fest. Die Position wird in "POS" an das rufende ║
║Programm zurückgegeben. Das am Anfang der Zeichenkette stehende Wort ║
║und die nachfolgenden Blanks und Null-Characters werden überlesen, ║
║so daß die Position des ersten Zeichens im nachfolgenden Wort in ║
║"POS" übergeben wird. Wenn das nächste Wort in der Zeichenkette nicht║
║vorhanden ist, wird in "POS" 0 zurückgegeben. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║CHARACTERSTRING Eingabestring [max. 200 Zeichen]. ║
║INTEGER Return: Position des nächsten Wortes ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: LAENGE ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: CHARACTER IN*100 ║
║ IN='Zu suchende Datei: NEXT.FOR' ║
║ CALL NEXT (IN,IPOS) ║
║ In der Variablen "IPOS" wird der Wert 4 als ║
║ Position für das erste Zeichen im nächsten Wort an ║
║ das rufende Programm übergeben. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 124
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine POSIT (IN,POS,STRIN,IND) ║
║Die Subroutine stellt die Position der Zeichenkette "STRIN" in der ║
║Zeichenkette "IN" fest. Die Position wird in "POS" an das rufende ║
║Programm zurückgegeben. Wenn der Indikator "IND" 1 gesetzt ist, wird ║
║nach dem letztmaligen Auftreten in "IN" gesucht, wenn "IND" 0 gesetzt║
║ist, wird nach dem erstmaligen Auftreten gesucht. Wenn "STRIN" in ║
║"IN" nicht vorhanden ist, wird in "POS" 0 zurückgegeben. "STRIN" darf║
║nicht als Substring übergeben werden. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║CHARACTERSTRING Eingabestring [max. 200 Zeichen]. ║
║INTEGER Return: Position des Suchstrings ║
║CHARACTERSTRING Zeichenkette, deren Position festgestellt werden ║
║ soll [max. 200 Zeichen]. ║
║INTEGER Indikator: 0: Es wird nach dem erstmaligen Auftreten║
║ gesucht. ║
║ 1: Es wird nach dem letztmaligen ║
║ Auftreten gesucht. ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: CHARACTER IN*100 ║
║ IN='Zu suchende Datei: POSIT.FOR' ║
║ CALL POSIT (IN,IPOS,'POSIT',1) ║
║ In der Variablen "IPOS" wird der Wert 20 als ║
║ Position für das letztmalige Auftreten des ║
║ Suchstrings an das rufende Programm übergeben. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 125
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine RECHTS (IN,OUT,LAN) ║
║Die Subroutine kopiert den String "IN" in den String "OUT". Dabei ║
║werden die in "IN" enthaltene String rechtsbündig in die Variable ║
║"OUT" kopiert. ║
║Es ist möglich, für die Strings "IN" und "OUT" diselbe Variable zu ║
║verwenden. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║CHARACTERSTRING Eingabestring [max. 200 Zeichen]. ║
║CHARACTERSTRING Return: Ausgabestring [max. 200 Zeichen]. ║
║INTEGER Position, an der das letzte Zeichen stehen soll ║
║ [max. 200]. ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: CHARACTER IN*100,OUT*80 ║
║ IN='RECHTS.FOR' ║
║ CALL RECHTS (IN,OUT,20) ║
║ Der Text in der Variablen "OUT" ist nun: ║
║ " RECHTS.FOR". ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 126
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine TXCODE (IN,OUT,CODE,ART) ║
║Die Subroutine kopiert den String "IN" in den String "OUT". Dabei ║
║werden alle Kleinbuchstaben, Großbuchstaben und Ziffern mit Hilfe ║
║einer Codetabelle "CODE" umgewandelt. Wenn in "ART" eine Null steht, ║
║wird verschlüsselt, eine Eins wird zum entschlüsseln übergeben. ║
║Ein- und Ausgabestrings dürfen eine Länge von maximal 200 Zeichen ║
║haben. Es ist möglich, für die Strings "IN" und "OUT" dieselbe ║
║Variable zu verwenden. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║CHARACTERSTRING Eingabestring [max. 200 Zeichen]. ║
║CHARACTERSTRING Return: Ausgabestring [max. 200 Zeichen]. ║
║CHARACTERSTRING Codetabelle [69 Zeichen!]. ║
║ In der Codetabelle stehen in der richtigen ║
║ Reihenfolge Zeichen, gegen die ausgetauscht werden ║
║ soll. ║
║ Die Zeichen 1 bis 10 stehen für die Ziffern 0 bis 9║
║ Die Zeichen 11 bis 36 stehen für die Zeichen A bis Z║
║ Die Zeichen 37 bis 62 stehen für die Zeichen a bis z║
║ Die Zeichen 63 bis 69 stehen für die Zeichen ÄÖÜäöüß║
║ Die Codetabelle muß EINDEUTIG sein, um den Text ║
║ wieder fehlerfrei entschlüsseln zu können (d. h. ║
║ jedes Zeichen darf in der Codetabelle nur einmal ║
║ vorhanden sein, alle 69 Zeichen müssen eingetragen ║
║ sein, es dürfen nur die o. g. Zeichen verwendet ║
║ werden). ║
║INTEGER Art der Codewandlung. ║
║ 0: verschlüsseln ║
║ 1: entschlüsseln ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: LAENGE ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: CHARACTER IN*100,OUT*80,CODE*38 ║
║ DATA CODE(1:32) /'9876543210QWERTZUIOPVASDFGHJKLBN'/║
║ DATA CODE(33:69) /'YXCMmnbvcxylkjhgfdsapoiuztrewqß'/║
║ DATA CODE(64:69) /'üöäÜÖÄ'/ ║
║ IN='ZU VERSCHLÜSSELNDER TEXT' ║
║ CALL TXCODE (IN,OUT,CODE,0) ║
║ Der Text in der Variablen "OUT" ist nun: ║
║ "VB NTJKEIAöKKTADRTJ LTXL". ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 127
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine UPCASE (IN,OUT) ║
║Die Subroutine kopiert den String "IN" in den String "OUT". Dabei ║
║werden alle Kleinbuchstaben in Großbuchstaben umgewandelt. ║
║Die Strings dürfen eine Länge von maximal 200 Zeichen haben. ║
║Es ist möglich, für die Strings "IN" und "OUT" dieselbe Variable zu ║
║verwenden. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║CHARACTERSTRING Eingabestring [max. 200 Zeichen]. ║
║CHARACTERSTRING Return: Ausgabestring [max. 200 Zeichen]. ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: LAENGE ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: CHARACTER IN*100,OUT*80 ║
║ IN='Zu suchende Datei: UPCASE.FOR' ║
║ CALL UPCASE (IN,OUT) ║
║ Der Text in der Variablen "OUT" ist nun: ║
║ "ZU SUCHENDE DATEI: UPCASE.FOR". ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 128
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine WOSUCH (IN,STRIN,ANZ) ║
║Die Subroutine stellt fest, um das wievielte Wort in der Zeichenkette║
║"IN" es sich bei der in "STRIN" übergebenen Zeichenkette handelt. ║
║Alle Strings dürfen eine Länge von maximal 200 Zeichen haben. Die ║
║Nummer des gesuchten Wortes wird in "ANZ" zurückgegeben. Wenn das ║
║Wort nicht gefunden wird, enthält "ANZ" eine 0. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║CHARACTERSTRING Eingabestring [max. 200 Zeichen]. ║
║CHARACTERSTRING Suchstring [max. 200 Zeichen]. ║
║INTEGER Return: Wortzähler ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: LAENGE,NEXT ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: CHARACTER IN*100 ║
║ IN='Zu suchende Datei: WOSUCH.FOR' ║
║ CALL WOSUCH (IN,'Datei',ANZ) ║
║ In der Variablen "ANZ" wird der Wert 3 ║
║ zurückgegeben. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 129
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine ZAHL (IN,IND) ║
║Die Subroutine stellt fest, ob im String "IN" eine in Integer- oder ║
║Realvariablen konvertierbare Zeichenfolge vorhanden ist und gibt ein ║
║entsprechendes Flag an das rufende Programm zurück. Die von der ║
║Routine berücksichtigten Maximalformate sind für Integer I11 und für ║
║Real F20.9. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║CHARACTERSTRING Eingabestring ║
║INTEGER Return: Indikator für Konvertierbarkeit ║
║ 0: nicht konvertierbar oder Wert zu groß ║
║ 1: nach Integer konvertierbar ║
║ 2: nach Real konvertierbar ║
║ 3: nach Real und nach Integer konvertierbar ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: LAENGE ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: CHARACTER IN*100 ║
║ IN='-12345.66666' ║
║ CALL ZAHL (IN,I) ║
║ In der Variablen "I" wird eine 2 zurückgegeben, da ║
║ der String nach Real konvertierbar ist. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 130
Laufwerks-, Verzeichnis- und Dateimanipulationen
Mit dieser Gruppe von Subroutinen können Informationen über Laufwerke,
Verzeichnisse und Dateien ermittelt werden. Daneben sind Wechsel in
andere Laufwerke oder Verzeichnisse und das Anlegen und Löschen von
Verzeichnissen möglich. Wichtig ist die Möglichkeit, aus einem Programm
heraus sämtliche Dateimanipulationen wie Kopieren, Moven und Löschen
optimiert ausführen zu können.
Besondere Bedeutung kommt der Subroutine "DFIND" zu, die alle Laufwerke
und Verzeichnisse eines Personal-Computers rekursiv nach Dateien oder
Dateigruppen durchsuchen kann. Dadurch ist es möglich, vom Programm
benötigte Dateien vor dem Öffnen im gesamten System zu suchen und zu
finden. So werden Programme, die Hilfsdateien benötigen, vom
Verzeichnis unabhängig.
Dateiinformationen können von allen Dateiformen, wie versteckten
Dateien, Systemdateien, Verzeichnissen -die unter DOS nichts anderes als
Dateien sind- und sogar von der Datenträgerkennung ermittelt werden. Zu
den Dateiinformationen gehören neben dem Dateinamen der Dateipfad,
Erzeugungsdatum und -zeit, die Dateiattribute und die Dateigröße.
Subroutinen zu Laufwerks-, Verzeichnis- und Dateimanipulationen
LAUFW a) Alle Laufwerke im System feststellen
LAUFD a) Aktuelles Laufwerk feststellen
LAUFK a) Typ eines Laufwerks feststellen
LAUFC a) Wechsel des aktuellen Laufwerks
DISKSP a) Freien Speicherplatz des aktuellen Laufwerks ermitteln
b) Freien Speicherplatz eines beliebigen Laufwerks ermitteln
c) Betriebsbereitschaft eines Laufwerks kontrollieren
GETVER a) Pfad und Namen des aktuellen Verzeichnisses ermitteln
SETVER a) Wechsel des aktuellen Verzeichnisses
CREVER a) Anlegen eines neuen Verzeichnisses
DELVER a) Löschen eines Verzeichnisses
DSUCH a) Dateiensuche in einem Verzeichnis
LFIND a) Dateiensuche in allen Verzeichnissen eines Laufwerks unter
Berücksichtigung der Dateiattribute
DFIND a) Dateiensuche in allen Verzeichnissen aller Laufwerke des
Systems
DINFO a) Dateispezifische Informationen ermitteln
DATEI a) Quelldatei kopieren wenn Zieldatei nicht vorhanden ist
b) Quelldatei kopieren wenn Zieldatei vorhanden ist
c) Quelldatei bewegen wenn Zieldatei nicht vorhanden ist
d) Quelldatei bewegen wenn Zieldatei vorhanden ist
e) Datei verschlüsseln
f) Datei entschlüsseln
g) Dateiattribute setzen
h) Dateiattribute zurücksetzen
i) Datei löschen
j) Dateiinhalt mit Nullcharacters überschreiben und anschließend
löschen
Seite 131
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine LAUFW (STRING,ANZ) ║
║Die Subroutine ermittelt alle in einem System gültigen Laufwerke. ║
║Die Kennbuchstaben der gefundenen Laufwerke werden in den ║
║Characterstring "STRING" geschrieben. Es werden physikalische, ║
║logische und substituierte Laufwerke aufgeführt. In "ANZ" wird die ║
║Anzahl der zu findenden Laufwerke begrenzt. Die Anzahl der tatsächlich║
║gefundenen Laufwerke wird in der Variablen zurückgegeben. Die im ║
║"STRING" nicht mit Laufwerkskennungen beschriebenen Bytes werden mit ║
║Blanks überschrieben. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║CHARACTERSTRING Return: String mit Kennbuchstaben der gefundenen ║
║ Laufwerke [ STRING*ANZ ] ║
║INTEGER Maximale Anzahl der zu suchenden Laufwerke ║
║ Return: Anzahl der tatsächlich gefundenen Laufwerke ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiel: CHARACTER LW*10 ║
║ I=10 ║
║ CALL LAUFW (LW,I) ║
║ Es werden bis zu zehn gültige Laufwerke ermittelt. ║
║ Die Kennbuchstaben der gefundenen Laufwerke werden in║
║ der Charactervariablen "LW" zurückgegeben. In "I" ║
║ steht die Anzahl der tatsächlich gefundenen ║
║ Laufwerke. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 132
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine LAUFD (LW) ║
║Die Subroutine gibt in der Charactervariablen "LW" den Kenn- ║
║buchstaben des aktuellen Laufwerks zurück. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║CHARACTER Return: Kennbuchstabe des aktuellen Laufwerks. ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiel: CHARACTER LW ║
║ CALL LAUFD (LW) ║
║ WRITE (*,'(1X,A)') LW ║
║ Die Routine schreibt den Kennbuchstaben des aktuellen║
║ Laufwerks auf den Bildschirm. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 133
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine LAUFC (LW) ║
║Die Subroutine wechselt in das in der Charactervariablen "LW" als ║
║Laufwerkskennbuchstaben übergebene Laufwerk. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║CHARACTER Kennbuchstabe des neuen Laufwerks. ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiel: CHARACTER LW ║
║ LW='D' ║
║ CALL LAUFC (LW) ║
║ CALL LAUFD (LW) ║
║ WRITE (*,'(1X,A)') LW ║
║ Mit der Subroutine LAUFC wird in das Laufwerk D: ║
║ gewechselt. Zur Kontrolle wird mit der Subroutine ║
║ LAUFD das aktuelle Laufwerk erfragt und am Bildschirm║
║ ausgegeben. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 134
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine LAUFK (LW,TYP) ║
║Die Subroutine stellt den Typ des in "LW" übergebenen Laufwerks fest ║
║und gibt ihn in "TYP" an das rufende Programm zurück. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║CHARACTER Kennbuchstabe des zu untersuchenden Laufwerks. ║
║INTEGER Return: Typ des Laufwerks: ║
║ 0: Festplattenlaufwerk oder RAM-Disk ║
║ 1: Diskettenlaufwerk ║
║ 2: Serverlaufwerk ║
║ 3: ungültiges Laufwerk ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiel: CHARACTER LW ║
║ CALL LAUFK ('C',TYP) ║
║ WRITE (*,'(1X,I1)') TYP ║
║ Die Routine schreibt den Typ des Laufwerks C: in ║
║ Form eines Falge auf den Bildschirm. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 135
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine GETVER (VERZ,FLAG) ║
║Die Subroutine schreibt den Pfad und den Namen des aktuellen ║
║Verzeichnisses in den Characterstring "VERZ". Bei einem Fehler wird ║
║in "FLAG" eine Eins, sonst eine Null zurückgegeben. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║CHARACTERSTRING [ 64 Characters! ] ║
║ Return: Pfad und Name des aktuellen Verzeichnisses ║
║ den DOS-Konventionen entsprechend. ║
║INTEGER Return: Fehlerflag. ║
║ 0: Funktion erfolgreich abgeschlossen ║
║ 1: Ein Fehler ist aufgetreten ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiel: INTEGER FLAG ║
║ CHARACTER VERZ*64 ║
║ CALL GETVER (VERZ,FLAG) ║
║ Wenn in "FLAG" eine Null zurückgegeben wurde, steht ║
║ in "VERZ" der Pfad und Name des aktuellen ║
║ Verzeichnisses zur Verfügung. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 136
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine SETVER (VERZ,FLAG) ║
║Die Subroutine wechselt das aktuelle Verzeichnis. Beim Auftreten eines║
║Fehlers wird in "FLAG" eine Eins, sonst eine Null übergeben. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║CHARACTERSTRING [LAUFWERK]//[PFAD]//VERZEICHNIS//CHAR(0) ║
║ Laufwerk, Pfad und Verzeichnisname den DOS- ║
║ Konventionen entsprechend. Der String muß mit einem ║
║ Nullcharacter abgeschlossen sein. ║
║INTEGER Return: Fehlerflag. ║
║ 0: Funktion erfolgreich abgeschlossen ║
║ 1: Ein Fehler ist aufgetreten ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiel: INTEGER FLAG ║
║ CALL SETVER ('D:\FORTRAN\LIB'//CHAR(0),FLAG) ║
║ Wenn in "FLAG" eine Null zurückgegeben wurde, ist das║
║ aktuelle Verzeichnis nun D:\FORTRAN\LIB. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 137
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine CREVER (VERZ,FLAG) ║
║Die Subroutine legt ein neues Verzeichnis an. Beim Auftreten eines ║
║Fehlers wird in "FLAG" eine Eins, sonst eine Null übergeben. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║CHARACTERSTRING [LAUFWERK]//[PFAD]//VERZEICHNIS//CHAR(0) ║
║ Laufwerk, Pfad und Verzeichnisname den DOS- ║
║ Konventionen entsprechend. Der String muß mit einem ║
║ Nullcharacter abgeschlossen sein. ║
║INTEGER Return: Fehlerflag. ║
║ 0: Funktion erfolgreich abgeschlossen ║
║ 1: Ein Fehler ist aufgetreten ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiel: INTEGER FLAG ║
║ CALL CREVER ('D:\FORTRAN\LIB'//CHAR(0),FLAG) ║
║ Wenn in "FLAG" eine Null zurückgegeben wurde, ist das║
║ Verzeichnis D:\FORTRAN\LIB angelegt worden. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 138
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine DELVER (VERZ,FLAG) ║
║Die Subroutine löscht ein Verzeichnis. Das zu löschende Verzeichnis ║
║darf keine Dateieinträge enthalten. Es darf nicht das aktuelle ║
║Verzeichnis sein. Beim Auftreten eines Fehlers wird in "FLAG" eine ║
║Eins, sonst eine Null zurückgegeben. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║CHARACTERSTRING [LAUFWERK]//[PFAD]//VERZEICHNIS//CHAR(0) ║
║ Laufwerk, Pfad und Verzeichnisname den DOS- ║
║ Konventionen entsprechend. Der String muß mit einem ║
║ Nullcharacter abgeschlossen sein. ║
║INTEGER Return: Fehlerflag. ║
║ 0: Funktion erfolgreich abgeschlossen ║
║ 1: Ein Fehler ist aufgetreten ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiel: INTEGER FLAG ║
║ CALL DELVER ('D:\FORTRAN\LIB'//CHAR(0),FLAG) ║
║ Wenn in "FLAG" eine Null zurückgegeben wurde, ist das║
║ Verzeichnis D:\FORTRAN\LIB gelöscht worden. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 139
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine DSUCH (PFAD,ATTR,ANZ,FELD) ║
║Die Subroutine ermöglicht das Auffinden einer oder mehrerer Dateien ║
║in einem Verzeichnis. Das Verzeichnis wird nach den auf das ║
║Suchargument und auf das Dateiattribut zutreffenden Dateinamen ║
║durchsucht. Die gefundenen Dateinamen werden ohne Laufwerksbezeichnung║
║und ohne Pfadnamen in einem Feld zurückgegeben. Das Suchargument muß ║
║ein Dateiname sein, der eine Laufwerksbezeichnung und einen Pfadnamen ║
║beinhalten darf. Die Joker * und ? sind zugelassen. Die maximale ║
║Anzahl der zu suchenden Dateien wird an die Routine übergeben, die ║
║Anzahl der tatsächlich gefundenen Dateien wird an das rufende Programm║
║zurückgegeben. Wenn ein Hardware-Interrupt erfolgt, weil z. B. der ║
║Diskettenschacht nicht geschlossen ist, wird in ANZ eine -1 ║
║zurückgegeben. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║CHARACTERSTRING [PFAD]//DATEINAME//CHAR(0) ║
║ Dateiname als Suchargument. Der Dateiname muß mit dem║
║ Nullcharacter abgeschlossen werden und darf einen ║
║ Pfadnamen sowie die Joker * und ? beinhalten. ║
║INTEGER Dateiattribut als zweites Suchargument. ║
║ 1 Read-only Datei ║
║ 2 Hidden Datei ║
║ 4 System Datei ║
║ 8 Volume-ID (nur in der Root) ║
║ 16 Subdirectory ║
║ 32 Archiv Datei ║
║ 64 Normale Datei ║
║ (Read-only, Archiv, Hidden oder ohne Attribute) ║
║ Die Attribute können durch Addition miteinander "OR"-║
║ verknüpft werden. Die Suche nach Subdirectorys und ║
║ Volume-ID's schließt die restlichen Attribute aus. ║
║INTEGER Anzahl der maximal zu suchenden Dateien. ║
║ Return: Anzahl der tatsächlich gefundenen Dateien. ║
║ oder: -1 wenn ein Hardwareinterupt erfolgt ║
║ ist, weil z. B. keine Diskette im Disketten- ║
║ laufwerk vorhanden ist. ║
║CHARACTERFELD DATEINAME//BLANKS [ 12 Characters * Anzahl! ] ║
║ Return: Feld mit den Namen der gefundenen Dateien. ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiel: CHARACTER FELD(10)*12 ║
║ IANZ=10 ║
║ CALL DSUCH ('C:/*.SYS'//CHAR(0),6,IANZ,FELD) ║
║ WRITE (*,'(10(1X,A,/))') (FELD(I),I=1,IANZ) ║
║ Bis zu 10 Hidden- oder System-Dateien mit dem ║
║ Dateierweiteungsnamen "SYS" werden in der Root des ║
║ Laufwerks C: gefunden und am Bildschirm dargestellt. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 140
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine LFIND (ATTR,LW,FNAME,ANZ,FELD) ║
║Die Subroutine ermöglicht das Auffinden einer oder mehrerer Dateien ║
║in einem Laufwerk. Das in "LW" übergebene Laufwerk wird nach dem in ║
║"FNAME" spezifizierten Dateinamen und nach dem in "ATTR" übergebenen ║
║Dateiattribut nach den auf beide Bedingungen zutreffenden Dateien ║
║durchsucht. Die gefundenen Dateinamen werden mit ihrem absoluten ║
║Pfadnamen in einem Feld zurückgegeben. Das Suchargument muß ein ║
║Dateiname ohne Laufwerksbezeichnung und Pfadnamen sein. Die Joker ║
║* und ? sind zugelassen. Die maximale Anzahl der zu suchenden Dateien ║
║wird an die Routine übergeben, die Anzahl der tatsächlich gefundenen ║
║Dateien wird an das rufende Programm zurückgegeben. Wenn ein ║
║Hardware-Interrupt erfolgt, weil z. B. der Diskettenschacht nicht ║
║geschlossen ist, wird in ANZ eine -1 zurückgegeben. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Dateiattribut als Suchargument ║
║ 1 Read-only Datei ║
║ 2 Hidden Datei ║
║ 4 System Datei ║
║ 8 Volume-ID (nur in der Root) ║
║ 16 Subdirectory ║
║ 32 Archiv Datei ║
║ 64 Normale Datei ║
║ (Read-only, Archiv, Hidden oder ohne Attribute) ║
║ Die Attribute können durch Addition miteinander "OR"-║
║ verknüpft werden. Die Suche nach Subdirectorys und ║
║ Volume-ID's schließt die restlichen Attribute aus. ║
║CHARACTER Laufwerkskennbuchstabe [ 1 Character! ] ║
║CHARACTERSTRING DATEINAME//CHAR(0) [ max. 13 Characters! ] ║
║ Dateiname als Suchargument. Der Dateiname muß mit dem║
║ Nullcharacter abgeschlossen werden und darf maximal ║
║ 13 Zeichen enthalten. ║
║INTEGER Anzahl der maximal zu suchenden Dateien. ║
║ Return: Anzahl der tatsächlich gefundenen Dateien. ║
║ oder: -1 wenn ein Hardwareinterupt erfolgt ║
║ ist, weil z. B. keine Diskette im Disketten- ║
║ laufwerk vorhanden ist. ║
║CHARACTERFELD PFAD//DATEINAME//BLANKS [ 50 Characters * Anzahl! ]║
║ Return: Feld mit Pfad und Namen der gefundenen ║
║ Dateien. ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiel: CHARACTER FELD(10)*50 ║
║ IANZ=10 ║
║ CALL LFIND (16,'D','*.*',IANZ,FELD) ║
║ WRITE (*,'(10(1X,A,/))') (FELD(I),I=1,IANZ) ║
║ Bis zu 10 Subdirectories werden im Laufwerk D: ║
║ aufgefunden und am Bildschirm mit dem kompletten ║
║ Pfadnamen dargestellt. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 141
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine DFIND (NAME,ANZ,FELD) ║
║Die Subroutine ermöglicht das Auffinden einer oder mehrerer Dateien ║
║in allen Laufwerken. Zuerst wird das aktuelle Laufwerk (auch ║
║Diskettenlaufwerk oder Server) nach den auf das Suchargument ║
║zutreffenden Dateinamen durchsucht. Anschließend werden alle anderen ║
║Laufwerke und Partitionen außer Diskettenlaufwerke und Server ║
║durchsucht. Die gefundenen Dateinamen werden mit ihrem absoluten ║
║Pfadnamen in einem Feld zurückgegeben. Das Suchargument muß ein ║
║Dateiname ohne Laufwerksbezeichnung und Pfadnamen sein. Die Joker ║
║* und ? sind zugelassen. Die maximale Anzahl der zu suchenden Dateien ║
║wird an die Routine übergeben, die Anzahl der tatsächlich gefundenen ║
║Dateien wird an das rufende Programm zurückgegeben. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║CHARACTERSTRING DATEINAME//CHAR(0) [ max. 13 Characters! ] ║
║ Dateiname als Suchargument. Der Dateiname muß mit dem║
║ Nullcharacter abgeschlossen werden und darf maximal ║
║ 13 Zeichen enthalten. ║
║INTEGER Anzahl der maximal zu suchenden Dateien. ║
║ Return: Anzahl der tatsächlich gefundenen Dateien. ║
║CHARACTERFELD PFAD//DATEINAME//BLANKS [ 50 Characters * Anzahl! ]║
║ Return: Feld mit Pfad und Namen der gefundenen ║
║ Dateien. ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiel: CHARACTER FELD(10)*50 ║
║ IANZ=10 ║
║ CALL DFIND ('*.SYS',IANZ,FELD) ║
║ WRITE (*,'(10(1X,A,/))') (FELD(I),I=1,IANZ) ║
║ Bis zu 10 Dateien mit dem Dateierweiteungsnamen "SYS"║
║ werden aufgefunden und am Bildschirm mit ihrem ║
║ Pfadnamen dargestellt. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 142
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine DINFO (PFAD,NAME,ATTR,DATUM,ZEIT,GROES) ║
║Die Subroutine übergibt Informationen über eine anhand eines ║
║Suchargumentes aufgefundene Datei an das rufende Programm. Das Such- ║
║argument muß ein Dateiname sein, der eine Laufwerksbezeichnung und ║
║einen Pfadnamen tragen darf. Die Joker * und ? sind zugelassen, ihre ║
║Verwendung ist aber nicht sinnvoll. Wenn die im Suchargument ║
║spezifizierte Datei gefunden wurde, werden der Dateiname, das Datei- ║
║attribut, das Datum und die Uhrzeit der letzten Änderung in der Datei ║
║und die Dateigröße in Bytes zurückgegeben, andernfalls werden die ║
║Parameter mit Blanks bzw. Nullen gefüllt. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║CHARACTERSTRING [PFAD]//DATEINAME//CHAR(0) ║
║ Dateiname als Suchargument. Der Dateiname muß mit dem║
║ Nullcharacter abgeschlossen werden. ║
║CHARACTERSTRING [ 12 Characters! ] ║
║ Return: Name der Datei. ║
║CHARACTERSTRING [ 6 Characters! ] ║
║ Return: Attribute der Datei. (z. B.: "A----R") ║
║ "A" = Archiv-Datei ║
║ "D" = Directory ║
║ "V" = Volume Label ║
║ "S" = System-Datei ║
║ "H" = Hidden-Datei ║
║ "R" = Read-only-Datei ║
║ "-" = Attribut nicht gesetzt ║
║INTEGER Return: Datum der letzten Änderung in der Datei in ║
║ der Form :"JJJJMMTT". ║
║INTEGER Return: Uhrzeit der letzten Änderung in der Datei in ║
║ der Form: "HHMMSS". ║
║INTEGER Return: Größe der Datei in Bytes. ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiel: CHARACTER NA*12,AT*6 ║
║ CALL DINFO ('C:\FO\INFO.ASM'//CHAR(0),NA,AT,ID,IZ,IG)║
║ IF (ID .NE. 0) ║
║ - WRITE (*,'(1X,A,1X,A,I9,I7,I8)') NA,AT,ID,IZ,IG ║
║ Wenn die Datei "INFO.ASM" im Verzeichnis "FO" des ║
║ Laufwerk "C" gefunden wird, werden die Datei- ║
║ informationen auf den Bildschirm geschrieben. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 143
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine DATEI (QUELLE,QATTR,ZIEL,FLAG) ║
║Die Subroutine ermöglicht das Manipulieren mit Dateien. In <QUELLE> ║
║steht der Name der Quelldatei, die manipuliert werden soll. In <QATTR>║
║werden Dateiattribute angegeben, nach denen die Quelldatei ║
║vorselektiert wird. Wenn die Quelldatei andere als die angegebenen ║
║Attribute aufweist, wird die Subroutine abgebrochen. In <ZIEL> steht ║
║der Name der Ergebnisdatei für die durchzuführende Manipulation. ║
║<FLAG> enthält eine Kennung für die Art der auszuführenden ║
║Dateimanipulation. Der Rückgabewert ist ein Fehlercode, der beim ║
║ordnungsgemäßen Abschluß der Subroutine Null ist, sonst eine positive ║
║Zahl enthält. Wenn ein Hardware-Interrupt erfolgt, weil z. B. der ║
║Diskettenschacht nicht geschlossen ist, wird in <FLAG> eine -1 ║
║zurückgegeben. Dateimanipulationen, die sich nur auf die Quelldatei ║
║beziehen, benötigen für <ZIEL> nur ein Null-Character. In <QATTR> ║
║wird das Dateiattribut der Quelldatei zurückgegeben. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║CHARACTERSTRING [LAUFWERK]//[PFAD]//DATEINAME//CHAR(0) ║
║ Quelldatei deren Inhalt manipuliert werden soll. Der ║
║ String muß mit einem Nullcharacter abgeschlossen ║
║ sein. Die Joker * und ? dürfen nicht enthalten sein. ║
║INTEGER Dateiattribut zum Ausselektieren der Quelldatei oder ║
║ zum Setzen oder Zurücksetzen von Dateiattributen. ║
║ 1 Read-only Datei ║
║ 2 Hidden Datei ║
║ 4 System Datei ║
║ 8 Volume-ID (nur in der Root) ║
║ 16 Subdirectory ║
║ 32 Archiv Datei ║
║ 64 Normale Datei ║
║ (Read-only, Archiv, Hidden oder ohne Attribute) ║
║ Die Attribute können durch Addition miteinander "OR"-║
║ verknüpft werden. ║
║ Return: Tatsächliches Attribut der Quelldatei ║
║ 1 Read-only Datei ║
║ 2 Hidden Datei ║
║ 4 System Datei ║
║ 8 Volume-ID (nur in der Root) ║
║ 16 Subdirectory ║
║ 32 Archiv Datei ║
║ Die Attribute sind miteinander "OR"-verknüpft. ║
║CHARACTERSTRING [LAUFWERK]//[PFAD]//DATEINAME//CHAR(0) ║
║ Zieldatei für die durchzuführende Manipulation. Der ║
║ String muß mit einem Nullcharacter abgeschlossen ║
║ sein. Die Joker * und ? dürfen nicht enthalten sein. ║
║INTEGER Art der Dateimanipulation ║
║ 0 Quelldatei kopieren, Zieldatei nicht ║
║ überschreiben ║
║ 1 Quelldatei kopieren, Zieldatei überschreiben ║
║ 2 Quelldatei kopieren, Zieldatei nicht ║
║ überschreiben, Quelldatei löschen ║
║ 3 Quelldatei kopieren, Zieldatei überschreiben, ║
║ Quelldatei löschen ║
║ 4 Quelldatei verschlüsseln ║
Seite 144
║ 5 Quelldatei entschlüsseln ║
║ 6 Quelldatei-Attribute setzen ║
║ 7 Quelldatei-Attribute zurücksetzen ║
║ 8 Quelldatei logisch löschen (auch leeres ║
║ Verzeichnis) ║
║ 9 Quelldatei physikalisch löschen (auch leeres ║
║ Verzeichnis) ║
║ Return: Fehlerflag ║
║ -1 Hardwarefehler aufgetreten ║
║ 0 Dateifunktion fehlerfrei beendet ║
║ 1 Nicht näher erläuterter Fehler ║
║ 2 Attribute der Quelldatei passen nicht ║
║ 3 Zieldatei vorhanden ║
║ 4 Zieldatei ist schreibgeschützt ║
║ 5 Quelldatei ist schreibgeschützt ║
║ 6 Quelldatei erhalten, da schreibgeschützt ║
║ 7 Quelldatei nicht vorhanden ║
║ 8 Zieldatei konnte nicht angelegt werden ║
║ 9 Attributänderung mißlungen ║
║ 10 Quelldatei ist bereits codiert ║
║ 11 Quelldatei ist bereits decodiert ║
║ 12 Kein Speicherplatz auf Disk verfügbar ║
║ 13 Verzeichnis ist nicht leer ║
║ 14 Nicht genügend Arbeitsspeicher vorhanden ║
║ 15 Quell- und Zieldatei sind identisch ║
║ 16 Fehlerhafte Parameter übergeben ║
║ 17 Aktuelles Verzeichnis ist nicht löschbar ║
║ 18 Löschvorgang mißlungen ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiel: CHARACTER QUELL*30,ZIEL*30 ║
║ IFL=6 ║
║ QUELL='A:\' ║
║ CALL DATEI (QUELL,0,CHAR(0),IFL) ║
║ IF (IFL .EQ. -1) WRITE ............. ║
║ IFL=1 ║
║ QUELL='D:\UTIL\DATEIA.TXT'//CHAR(0) ║
║ ZIEL ='A:\TEXTE\DATEIB.TXT'//CHAR(0) ║
║ CALL DATEI (QUELL,64,ZIEL,IFL) ║
║ IF (IFL .NE. 0) WRITE ............. ║
║ IFL=4 ║
║ QUELL='D:\UTIL\DATEIA.TXT'//CHAR(0) ║
║ CALL DATEI (QUELL,64,CHAR(0),IFL) ║
║ IF (IFL .NE. 0) WRITE ............. ║
║ Im ersten Beispiel wird lediglich kontrolliert, ob ║
║ der Diskettenschacht im Laufwerk A: geschlossen ist. ║
║ Das zweite Beispiel kopiert eine Datei und im dritten║
║ Beispiel wird eine Datei verschlüsselt. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 145
Zugriff auf Speicherinhalte
Subroutinen aus FORSUB.LIB erlauben es, beliebige Speicheradressen
auszulesen, zu beschreiben oder deren Inhalte umzuspeichern. Dadurch
ist es beispielsweise möglich, Daten direkt in den Bildschirmspeicher zu
schreiben oder daraus zu lesen. Auch können bestimmte Statusadressen
des Personal-Computers ausgelesen oder beschrieben werden. Allokierte
Speicherbereiche und Variableninhalte lassen sich extrem schnell
umkopieren.
Subroutinen für den Zugriff auf Speicherinhalte
PEEK a) Speicherinhalt ab Segment/Offset-Adresse in eine Variable
schreiben
POKE a) Variableninhalt an eine Segment/Offset-Adresse in den
Speicher schreiben
PEPO a) Speicherinhalt ab Segment/Offset-Adresse mit vorgegebener
Länge an eine andere Speicheradresse schreiben.
PEEKS a) Jedes zweite Byte eines Speicherinhalts ab Segment/Offset-
Adresse in eine Variable schreiben (Bildschirmspeicher!)
POKES a) Variableninhalt an eine Segment/Offset-Adresse in den
Speicher schreiben, dabei nur jedes zweite Byte beschreiben
(Bildschirmspeicher!)
Seite 146
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine PEEK (SEGMENT,OFFSET,STRING,ANZ) ║
║Die Subroutine liest ANZ Byte aus dem RAM-Speicher ab der Adresse ║
║SEGMENT:OFFSET in eine Variable STRING. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Segment der Adresse im RAM-Speicher. ║
║INTEGER Offset der Adresse im RAM-Speicher. ║
║INTEGER Return: Aus dem RAM-Speicher gelesener Wert ║
║ (ANZ muß dazu der Länge der Integervariablen ║
║ entsprechen: 1, 2 oder 4). ║
║oder: ║
║CHARACTERSTRING Return: Aus dem RAM-Speicher gelesener String ║
║ (ANZ muß dazu der Länge des zu lesenden Strings ║
║ entsprechen). ║
║INTEGER Anzahl der in STRING einzulesenden Byte. ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiele: CALL PEEK (1,10,I,4) ║
║ Vier Byte ab der RAM-Adresse Segment 1, Offset 10 ║
║ werden in eine Integervariable I gelesen. ║
║ CHARACTER STRING*20 ║
║ CALL PEEK (1,10,STRING,20) ║
║ Zwanzig Byte ab der RAM-Adresse Segment 1, Offset 10 ║
║ werden in einen Characterstring STRING gelesen. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 147
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine POKE (SEGMENT,OFFSET,STRING,ANZ) ║
║Die Subroutine schreibt ANZ Byte aus der Variablen STRING in den ║
║RAM-Speicher ab Adresse SEGMENT:OFFSET. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Segment der Adresse im RAM-Speicher. ║
║INTEGER Offset der Adresse im RAM-Speicher. ║
║INTEGER In den RAM-Speicher zu schreibender Wert ║
║ (ANZ muß dazu der Länge der Integervariablen ║
║ entsprechen: 1, 2 oder 4). ║
║oder: ║
║CHARACTERSTRING In den RAM-Speicher zu schreibender String ║
║ (ANZ muß dazu der Länge des zu schreibenden Strings ║
║ entsprechen). ║
║INTEGER Anzahl der aus STRING in den RAM-Speicher zu ║
║ schreibenden Byte. ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiele: CALL POKE (1,10,I,4) ║
║ Es werden vier Byte ab der RAM-Adresse Segment 1, ║
║ Offset 10 aus der Integervariablen I in den ║
║ RAM-Speicher geschrieben. ║
║ CHARACTER STRING*20 ║
║ CALL POKE (1,10,STRING,20) ║
║ Es werden zwanzig Byte ab der RAM-Adresse Segment 1, ║
║ Offset 10 aus dem Characterstring STRING in den ║
║ RAM-Speicher geschrieben. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 148
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine PEPO (LESSEG,LESOFF,SCHSEG,SCHOFF,ANZ) ║
║Die Subroutine liest ANZ Byte aus dem RAM-Speicher ab der Adresse ║
║LESSEG:LESOFF und schreibt sie an anderer Stelle ab der Adresse ║
║SCHSEG:SCHOFF zurück. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Segment des zu lesenden Speicherinhalts. ║
║INTEGER Offset des zu lesenden Speicherinhalts. ║
║INTEGER Segment der zu beschreibenden Speicheradresse. ║
║INTEGER Offset der zu beschreibenden Speicheradresse. ║
║INTEGER Anzahl der in STRING einzulesenden Byte. ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiele: CALL PEPO (1,10,100,10,1000) ║
║ 1000 Byte ab der RAM-Adresse Segment 1, Offset 10 ║
║ werden in eine an die Adresse Segment 100, Offset 10 ║
║ geschrieben. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 149
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine PEEKS (SEGMENT,OFFSET,STRING,ANZ) ║
║Die Subroutine liest ANZ Bytes aus dem Bildschirmspeicher ab der ║
║Adresse SEGMENT:OFFSET in eine Variable STRING. Dabei wird jedoch nur ║
║jedes zweite Byte aus dem Bildschirmspeicher gelesen. Es ist also ║
║möglich nur Textzeichen oder nur Farbattribute zu lesen. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Segment des Bildschirmspeichers: ║
║ #0B000: Segment des Monochromebildschirmspeichers ║
║ #0B800: Segment des Farbbildschirmspeichers ║
║INTEGER Offset im Bildschirmspeicher. ║
║CHARACTERSTRING Return: Aus dem Bildschirmspeicher gelesener Text ║
║ oder Farbattribute. ║
║INTEGER Anzahl der in STRING einzulesenden Byte. ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiele: CHARACTER STRING*40 ║
║ CALL PEEKS (#0B800,0,STRING,40) ║
║ Vierzig Farbattribute werden aus dem Farbbildschirm- ║
║ speicher ausgelesen und in der Variablen STRING ║
║ abgelegt. ║
║ CHARACTER STRING*40 ║
║ CALL PEEKS (#0B000,1,STRING,40) ║
║ Vierzig Textzeichen werden aus dem Monochrome- ║
║ bildschirmspeicher ausgelesen und in der Variablen ║
║ STRING abgelegt. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 150
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine POKES (SEGMENT,OFFSET,STRING,ANZ) ║
║Die Subroutine schreibt ANZ Bytes aus der Variablen STRING in den ║
║Bildschirmspeicher ab der Adresse SEGMENT:OFFSET. Dabei wird jedoch ║
║nur jedes zweite Offset des Bildschirmspeichers beschrieben. Es ist ║
║dadurch möglich nur Textzeichen oder nur Farbattribute zu schreiben. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Segment des Bildschirmspeichers: ║
║ #0B000: Segment des Monochromebildschirmspeichers ║
║ #0B800: Segment des Farbbildschirmspeichers ║
║INTEGER Offset im Bildschirmspeicher. ║
║CHARACTERSTRING In den Bildschirmspeicher zu schreibender Text oder ║
║ Farbattribute. ║
║INTEGER Anzahl der in den Bildschirmspeicher zu schreibenden ║
║ Bytes. ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiele: CHARACTER STRING*40 ║
║ CALL POKES (#0B800,0,STRING,40) ║
║ Vierzig Farbattribute werden aus der Variablen STRING║
║ in den Bildschirmspeicher geschrieben. ║
║ CHARACTER STRING*40 ║
║ CALL POKES (#0B000,1,STRING,40) ║
║ Vierzig Textzeichen werden aus der Variablen STRING ║
║ in den Bildschirmspeicher geschrieben. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 151
Virtuelle Speicherverwaltung
Im Gegensatz zu vielen anderen Hochsprachen bietet FORTRAN standardmäßig
nicht die Möglichkeit der virtuellen Speicherverwaltung. Subroutinen
aus FORSUB.LIB ermöglichen jedoch die Allokation von Speicherblöcken zur
Ablage von Datenmengen, das Rückgewinnen von Daten aus allokierten
Speicherblöcken und das Verändern und Löschen allokierter
Speicherbereiche. Durch die virtuelle Speicherverwaltung können zum
Beispiel lokale und globale Datenbereiche eingerichtet,
Bildschirminhalte und Datenfelder vorübergehend zwischengespeichert und
sehr schnelle Datenzugriffe realisiert werden.
Vier Subroutinen können neben dem verfügbaren Arbeitspeicher den Inhalt
einer Arbeitsdatei für sehr große zu verwaltende Datenmengen nutzen.
Wenn im Arbeitsspeicher nicht mehr genügend Speicherplatz vorhanden ist,
wird eine temporäre, direct organisierte Datei eröffnet. Die dort
abgelegten Daten stehen unabhängig von der Größe des noch freien
Arbeitsspeichers zur Verfügung. Das Programm erhält von den Subroutinen
für jeden Datenblock im Arbeitsspeicher oder in der Arbeitsdatei eine
Adresse zurück, mit deren Hilfe auf die dort abgelegten Daten
zugegriffen werden kann. Die Adresse ist positiv, wenn sie den
Arbeitsspeicher betrifft und negativ, wenn sie die Arbeitsdatei
betrifft. Beim Zugriff auf einen abgelegten Datenblock erkennt die
betreffende Subroutine daran automatisch, wo die Daten zu finden sind.
Subroutinen zur virtuellen Speicherverwaltung
ALMEM a) Block im Arbeitsspeicher allokieren
MOMEM a) Die Größe eines im Arbeitsspeicher allokierten Blocks
ändern
REMEM a) Im Arbeitsspeicher allokierten Block wieder freigeben
CREMEM a) Block im Arbeitsspeicher oder in einer Arbeitsdatei
allokieren und Variableninhalt dort ablegen
PUTMEM a) Variableninhalt in den bereits allokierten Block im
Arbeitsspeicher oder in der Arbeitsdatei ablegen
GETMEM a) Inhalt aus dem allokierten Block des Arbeitsspeichers oder
der Arbeitsdatei in einer Variablen ablegen
FREMEM a) Allokierten Block im Arbeitsspeicher oder in der Arbeitsdate
wieder freigeben
Seite 152
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine ALMEM (BYTES,SEG,FLAG) ║
║Die Subroutine allokiert einen "BYTES" großen Bereich in der Memory. ║
║Bei Erfolgreicher Allokation wird in "SEG" die Nummer des Segmentes ║
║übergeben, an dem der allokierte Speicherbereich beginnt. Das "FLAG" ║
║ist in diesen Fall Null gesetzt, sonst eins. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Größe des zu allokierenden Speicherblocks in Bytes. ║
║INTEGER Return: Segment in dem der allokierte Speicherblock ║
║ beginnt. Das Offset des allokierten Speicherblocks ║
║ ist Null. ║
║INTEGER Return: Fehlerflag ║
║ 0: Speicherblock erfolgreich allokiert ║
║ 1: Speicherblock konte nicht allokiert werden. ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiel: INTEGER SEG,FLAG ║
║ CALL ALMEM (1000,SEG,FLAG) ║
║ Wenn in "FLAG" eine Null zurückgegeben wurde, steht ║
║ ab der Adresse SEG:0 ein Speicherblock von 1000 Bytes║
║ zur Verfügung. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 153
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine MOMEM (BYTES,SEG,FLAG) ║
║Die Subroutine versucht die Größe eines schon allokierten Blocks in ║
║der Memory zu ändern. In BYTES" wird die neue Blockgröße in Bytes und ║
║in "SEG" wird das Segment des schon allokierten Blocks angegeben. ║
║Bei Erfolg wird in "FLAG" eine Null übergeben, sonst eine Eins. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Neue Größe für den schon allokierenden Speicherblock ║
║ in Bytes. ║
║INTEGER Segment des schon allokierten Speicherblocks. ║
║INTEGER Return: Fehlerflag ║
║ 0: Speicherblock erfolgreich geändert ║
║ 1: Speicherblock konte nicht geändert werden. ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiel: INTEGER SEG,FLAG ║
║ CALL ALMEM (1000,SEG,FLAG) ║
║ CALL MOMEM (500,SEG,FLAG) ║
║ Wenn in "FLAG" eine Null zurückgegeben wurde, ist der║
║ mit "ALMEM" allokierte Speicherblock von 1000 Bytes ║
║ erfolgreich auf 500 Bytes verkleinert worden. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 154
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine REMEM (SEG,FLAG) ║
║Die Subroutine gibt einen vorher allokierten Bereich in der Memory ║
║ab der Adresse SEG:0 wieder frei. Wenn dabei ein Fehler auftritt, wird║
║"FLAG" eins gesetzt, sonst enthält es eine Null. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Segment des vorher allokierten Speicherblocks. ║
║ beginnt. Das Offset des allokierten Speicherblocks ║
║ ist Null. ║
║INTEGER Return: Fehlerflag ║
║ 0: Speicherblock erfolgreich allokiert ║
║ 1: Speicherblock konte nicht allokiert werden. ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiel: INTEGER SEG,FLAG ║
║ CALL ALMEM (1000,SEG,FLAG) ║
║ CALL REMEM (SEG,FLAG) ║
║ Wenn in "FLAG" eine Null zurückgegeben wurde, ist der║
║ vorher mit "ALMEM" allokierte 1000 byte große ║
║ Speicherblock wieder freigegeben. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 155
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine CREMEM (ADD,LAN,SEG,FLAG) ║
║Die Subroutine allokiert einen "LAN" Byte großen Bereich in der ║
║Memory. Falls in der Memory kein Speicherplatz mehr zur Verfügung ║
║steht, wird ein entsprechender Bereich in einer direkt organisierten ║
║temporären Datei zur Verfügung gestellt. Die an der Adresse "ADD" ║
║gespeicherten Daten oder Datenfelder werden in den allokierten ║
║Bereich umgespeichert. In "SEG" steht anschließend die Adresse des ║
║allokierten Speicherbereiches. Sie ist positiv, wenn der Speicher- ║
║bedarf in der Memory allokiert werden konnte (Segment) und sie ist ║
║negativ, wenn der Speicherbedarf in der temporären Datei zur ║
║Verfügung steht (Satznummer). Die in "SEG" übergebene Adresse wird ║
║für zukünftige Operationen mit den Subroutinen "PUTMEM", "GETMEM" und║
║"FREMEM" benötigt. Wenn diese Subroutine von einem Programm genutzt ║
║wird, darf keine Datei mit dem Unit 100 eröffnet werden, da das Unit ║
║für die temporäre Datei benötigt wird. Bei erfolgreicher Beendigung ║
║der Subroutine steht in "FLAG" eine Null, sonst eine Eins. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Adresse einer Variablen oder eines Variablenfeldes, ║
║ das in der Memory abgelegt werden soll ║
║ [ LOC(Variable) ]. ║
║INTEGER Größe der Variable oder des Variablenfeldes in Byte.║
║INTEGER Return: Positiv: Memorysegment, an dem die Variable ║
║ oder das Variablenfeld abgelegt ist. ║
║ Negativ: Satznummer in der direkt organis. ║
║ temporären Datei, ab der die Variable oder ║
║ das Variablenfeld abgelegt ist. ║
║INTEGER Return: Fehlerflag ║
║ 0: Subroutine erfolgreich abgeschlossen. ║
║ 1: Ein Fehler ist aufgetreten. ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: ADRESS,ALMEM,FREMEM,PEPO ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: INTEGER FELD(100),FELD1(100),FELD2(100),SEG ║
║ DO 1 I=1,100 ║
║ FELD(I)=1 ║
║ FELD2(I)=0 ║
║ 1 CONTINUE ║
║ CALL CREMEM (LOC(FELD),400,SEG,I) ║
║ IF (I .NE. 0) GOTO 2 ║
║ CALL GETMEM (LOC(FELD1),400,SEG,I) ║
║ IF (I .NE. 0) GOTO 2 ║
║ CALL PUTMEM (LOC(FELD2),400,SEG,I) ║
║ IF (I .NE. 0) GOTO 2 ║
║ CALL FREMEM (SEG,I) ║
║ IF (I .NE. 0) GOTO 2 ║
║ RETURN ║
║ 2 WRITE(*,'(1X,A)') 'Fehler!' ║
║ Mit der Subroutine "CREMEM" werden 400 Byte in der ║
║ Memory bzw. in einem temporären File allokiert und ║
║ das Integerfeld "FELD" im allokierten Bereich ║
║ abgelegt. "GETMEM" liest den allokierten Bereich ║
║ in ein Integerfeld "FELD1". Die Subroutine "PUTMEM" ║
║ überschreibt den allokierten Speicherbereich mit dem║
Seite 156
║ Integerfeld "FELD2". "FREMEM" gibt den allokierten ║
║ Speicherbereich wieder frei. Beim Auftreten eines ║
║ Fehlers wird eine Meldung ausgegeben. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 157
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine PUTMEM (ADD,LAN,SEG,FLAG) ║
║Die Subroutine legt eine Variable oder ein Variablenfeld, dessen ║
║Adresse in "ADD" übergeben wird, in bereits allokierter Memory ab. ║
║Dazu muß in "SEG" die Adresse des allokierten Speicherbereichs ║
║stehen. Sie ist positiv, wenn der Speicherbedarf in der Memory ║
║allokiert ist (Segment) und sie ist negativ, wenn der Speicherbedarf ║
║in einer temporären Datei zur Verfügung steht (Satznummer). In ║
║"LAN" steht die Länge der Variable oder des Variablenfeldes. Bei ║
║erfolgreicher Beendigung der Subroutine wird in "FLAG" eine Null, ║
║sonst eine Eins an das rufende Programm zurückgegeben. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Adresse einer Variablen oder eines Variablenfeldes, ║
║ das in der Memory abgelegt werden soll ║
║ [ LOC(Variable) ]. ║
║INTEGER Größe der Variable oder des Variablenfeldes in Byte.║
║INTEGER Positiv: Segmentadresse der Memory, an der die ║
║ Variable oder das Variablenfeld abgelegt werden ║
║ soll. ║
║ Negativ: Satznummer in der direkt organisierten ║
║ temporären Datei, ab der die Variable oder das ║
║ Variablenfeld abzulegen ist ║
║INTEGER Return: Fehlerflag ║
║ 0: Subroutine erfolgreich abgeschlossen. ║
║ 1: Ein Fehler ist aufgetreten. ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: ADRESS,PEPO ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: INTEGER FELD(100),FELD1(100),FELD2(100),SEG ║
║ DO 1 I=1,100 ║
║ FELD(I)=1 ║
║ FELD2(I)=0 ║
║ 1 CONTINUE ║
║ CALL CREMEM (LOC(FELD),400,SEG,I) ║
║ IF (I .NE. 0) GOTO 2 ║
║ CALL GETMEM (LOC(FELD1),400,SEG,I) ║
║ IF (I .NE. 0) GOTO 2 ║
║ CALL PUTMEM (LOC(FELD2),400,SEG,I) ║
║ IF (I .NE. 0) GOTO 2 ║
║ CALL FREMEM (SEG,I) ║
║ IF (I .NE. 0) GOTO 2 ║
║ GOTO 3 ║
║ 2 WRITE(*,'(1X,A)') 'Fehler!' ║
║ Mit der Subroutine "CREMEM" werden 400 Byte in der ║
║ Memory bzw. in einem temporären File allokiert und ║
║ das Integerfeld "FELD" im allokierten Bereich ║
║ abgelegt. "GETMEM" liest den allokierten Bereich ║
║ in ein Integerfeld "FELD1". Die Subroutine "PUTMEM" ║
║ überschreibt den allokierten Speicherbereich mit dem║
║ Integerfeld "FELD2". "FREMEM" gibt den allokierten ║
║ Speicherbereich wieder frei. Beim Auftreten eines ║
║ Fehlers wird eine Meldung ausgegeben. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 158
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine GETMEM (ADD,LAN,SEG,FLAG) ║
║Die Subroutine speichert "LAN" Bytes aus der Memory bzw. aus einem ║
║temporären File in eine Variable oder in ein Variablenfeld, dessen ║
║Adresse in "ADD" an die Subroutine übergeben wird. In "SEG" wird ║
║dazu die Adresse des Speicherbereichs an die Routine übergeben. Sie ║
║ist positiv, wenn der Speicherbereich in der Memory allokiert ist ║
║(Segment) und sie ist negativ, wenn der Speicherbereich in einer ║
║temporären Datei zur Verfügung steht (Satznummer). Bei erfolgreicher ║
║Beendigung der Subroutine wird in "FLAG" eine Null, sonst eine Eins ║
║an das rufende Programm zurückgegeben. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Adresse einer Variablen oder eines Variablenfeldes, ║
║ in das aus der Memory geschrieben werden soll ║
║ [ LOC(Variable) ]. ║
║INTEGER Größe der Variable oder des Variablenfeldes in Byte.║
║INTEGER Positiv: Segmentadresse der Memory, ab der aus der ║
║ Memory gelesen werden soll. ║
║ Negativ: Satznummer in der direkt organisierten ║
║ temporären Datei, ab der gelesen werden soll. ║
║INTEGER Return: Fehlerflag ║
║ 0: Subroutine erfolgreich abgeschlossen. ║
║ 1: Ein Fehler ist aufgetreten. ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: ADRESS,PEPO ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: INTEGER FELD(100),FELD1(100),FELD2(100),SEG ║
║ DO 1 I=1,100 ║
║ FELD(I)=1 ║
║ FELD2(I)=0 ║
║ 1 CONTINUE ║
║ CALL CREMEM (LOC(FELD),400,SEG,I) ║
║ IF (I .NE. 0) GOTO 2 ║
║ CALL GETMEM (LOC(FELD1),400,SEG,I) ║
║ IF (I .NE. 0) GOTO 2 ║
║ CALL PUTMEM (LOC(FELD2),400,SEG,I) ║
║ IF (I .NE. 0) GOTO 2 ║
║ CALL FREMEM (SEG,I) ║
║ IF (I .NE. 0) GOTO 2 ║
║ GOTO 3 ║
║ 2 WRITE(*,'(1X,A)') 'Fehler!' ║
║ Mit der Subroutine "CREMEM" werden 400 Byte in der ║
║ Memory bzw. in einem temporären File allokiert und ║
║ das Integerfeld "FELD" im allokierten Bereich ║
║ abgelegt. "GETMEM" liest den allokierten Bereich ║
║ in ein Integerfeld "FELD1". Die Subroutine "PUTMEM" ║
║ überschreibt den allokierten Speicherbereich mit dem║
║ Integerfeld "FELD2". "FREMEM" gibt den allokierten ║
║ Speicherbereich wieder frei. Beim Auftreten eines ║
║ Fehlers wird eine Meldung ausgegeben. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 159
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine FREMEM (SEG,FLAG) ║
║Die Subroutine gibt den ab der Adresse "SEG" allokierten Speicher- ║
║bereich in der Memory oder in einem temporären direkt organisierten ║
║File frei. Bei erfolgreicher Beendigung der Subroutine wird in "FLAG"║
║eine Null, sonst eine Eins an das rufende Programm zurückgegeben. ║
║Die Adresse "FLAG" wird Null gesetzt. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Positiv: Segmentadresse in der Memory. ║
║ Negativ: Satznummer in der direkt organisierten ║
║ temporären Datei. ║
║ Return: Null bei erfolgreichen Abschluß der Routine.║
║INTEGER Return: Fehlerflag ║
║ 0: Subroutine erfolgreich abgeschlossen. ║
║ 1: Ein Fehler ist aufgetreten. ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: REMEM ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: INTEGER FELD(100),FELD1(100),FELD2(100),SEG ║
║ DO 1 I=1,100 ║
║ FELD(I)=1 ║
║ FELD2(I)=0 ║
║ 1 CONTINUE ║
║ CALL CREMEM (LOC(FELD),400,SEG,I) ║
║ IF (I .NE. 0) GOTO 2 ║
║ CALL GETMEM (LOC(FELD1),400,SEG,I) ║
║ IF (I .NE. 0) GOTO 2 ║
║ CALL PUTMEM (LOC(FELD2),400,SEG,I) ║
║ IF (I .NE. 0) GOTO 2 ║
║ CALL FREMEM (SEG,I) ║
║ IF (I .NE. 0) GOTO 2 ║
║ GOTO 3 ║
║ 2 WRITE(*,'(1X,A)') 'Fehler!' ║
║ Mit der Subroutine "CREMEM" werden 400 Byte in der ║
║ Memory bzw. in einem temporären File allokiert und ║
║ das Integerfeld "FELD" im allokierten Bereich ║
║ abgelegt. "GETMEM" liest den allokierten Bereich ║
║ in ein Integerfeld "FELD1". Die Subroutine "PUTMEM" ║
║ überschreibt den allokierten Speicherbereich mit dem║
║ Integerfeld "FELD2". "FREMEM" gibt den allokierten ║
║ Speicherbereich wieder frei. Beim Auftreten eines ║
║ Fehlers wird eine Meldung ausgegeben. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 160
Childprozess und Interruptaufruf
Als Childprozess wird ein Programm bezeichnet, das aus einem aktiven
Programm heraus aufgerufen und ausgeführt wird. Während der Ausführung
des Childprozesses wartet das rufende Programm, bis es die Kontrolle
wieder zurückerhält. Der Childprozess kann jedes beliebige ausführbare
Programm oder ein DOS-Befehl sein. Es ist möglich, ein sehr großes
Programm in mehrere kleine Programme zu untergliedern und jeweils nur
das aktuelle Teilprogramm auszuführen. Dadurch werden Probleme mit dem
maximal 640 kB großen adressierbaren Arbeitspeicher unter dem
Betriebssystem DOS vermieden. DOS-Befehle wie DIR oder COPY können als
Childprozess aus einem Programm heraus aufgerufen werden.
Das Betriebssystem DOS verarbeitet sogenannte Interrupts, um bestimmte,
häufig benötigte Vorgänge zur Ausführung zu bringen. So wird zum
Beispiel die Bildschirmausgabe über das Interrupt 10H gesteuert. Durch
die entsprechende Belegung der benötigten Register werden beispielsweise
Zeichen ausgegeben, Farben gesetzt, Bildschirmbereiche gescrollt,
gelöscht oder gelesen und der Cursor gesetzt. Neben der
Bildschirmgestaltung ist es mit Interruptaufrufen möglich, Einfluß auf
die Arbeit der Tastatur, der Disketten und Harddisklaufwerke und auf die
anderen elektronischen Komponenten des Personal-Computers zu nehmen.
Subroutinen zum Childprozess und zum Interruptaufruf
SYS a) Childprozess zur Ausführung bringen
ERRLEV a) Programm mit ERRORLEVEL beenden
GETLEV a) ERRORLEVEL eines Childprozesses ermitteln
INTER a) Software-Interrupt zur Ausführung bringen
Seite 161
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine SYS (NAME) ║
║Die Subroutine ermöglicht das Aufrufen eines Childprozesses. Die ║
║Ausführung des rufenden Programms wird unterbrochen, bis der ║
║aufgerufene Prozess beendet ist. Danach wird die Kontrolle an das ║
║rufende Programm zurückgegeben. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║CHARACTERSTRING Name des auszuführenden Prozesses. Es müßen die ║
║ DOS-Konventionen benutzt werden. ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiele: CALL SYS ('DIR C:\UTIL') ║
║ CALL SYS ('CHEM1') ║
║ Im ersten Beispiel werden die Dateien des ║
║ Verzeichnisses UTIL im Laufwerk C: am Bildschirm ║
║ angezeigt, sofern das Verzeichnis vorhanden ist. ║
║ Das zweite Beispiel ruft ein Programm CHEM1 auf. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 162
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine ERRLEV (CODE) ║
║Die Subroutine beendet das rufende Programm mit dem in "CODE" ║
║übergebenen Errorlevel. In einer Batchdatei kann anschließend anhand ║
║des Errorlevels verzweigt werden (IF ERRORLEVEL .......). ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Errorlevel (Fehlercode) [ 0 bis 255 ]. ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiel: READ (1,'(2I3,F8.3)',IOSTAT=I) I,J,A ║
║ IF (I .NE. 0) CALL ERRLEV (3) ║
║ Wenn beim Lesen aus der Datei mit dem Unit 1 ein ║
║ Fehler auftritt, wird das Programm mit dem Errorlevel║
║ 3 beendet. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 163
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine GETLEV (CODE) ║
║Die Subroutine gibt den Errorlevel eines Childprozesses an das ║
║rufende Programm. Anhand des Errorlevels kann im rufenden Programm ║
║entsprechend verzweigt werden. Vom Childprozess kann mit Hilfe der ║
║Subroutine ERRLEV ein Errorcode an das Betriebssystem übergeben ║
║werden, das mit der Subrooutine GETLEV ausgewertet werden kann. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Return: Errorlevel (Fehlercode) des Childprozesses ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiel CALL SYS ('CHILD') ║
║ CALL GETLEV (I) ║
║ IF (I .NE. 0) THEN ║
║ WRITE (*,'(1X,A)') 'Childpprogramm fehlerfrei' ║
║ ELSE ║
║ WRITE (*,'(1X,A)') 'Childpprogramm fehlerhaft' ║
║ ENDIF ║
║ Wenn beim Lesen aus der Datei mit dem Unit 1 ein ║
║ Fehler auftritt, wird das Programm mit dem Errorlevel║
║ 3 beendet. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 164
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine INTER (IN,AX,BX,CX,DX,BP,SI,DI,DS,ES,FLAG)║
║Die Subroutine ermöglicht die Ausführung eines Software-Interrupts. ║
║Die Prozessorregister und die Segmentregister DS und ES werden vor dem║
║Aufruf mit den benötigten Inhalten geladen. Nach dem Aufruf mit der ║
║Interruptnummer in der Variablen "IN" werden die neuen Registerinhalte║
║und das Carryflag an das rufende Programm zurückgegeben. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Nummer des zur Ausführung kommenden Interrupts. ║
║ Return: 0 wenn ungültige Interruptnummer übergeben ║
║ wurde. ║
║INTEGER Inhalt für das AX-Register. ║
║ Return: Inhalt des AX-Registers nach der Ausführung. ║
║INTEGER Inhalt für das BX-Register. ║
║ Return: Inhalt des BX-Registers nach der Ausführung. ║
║INTEGER Inhalt für das CX-Register. ║
║ Return: Inhalt des CX-Registers nach der Ausführung. ║
║INTEGER Inhalt für das DX-Register. ║
║ Return: Inhalt des DX-Registers nach der Ausführung. ║
║INTEGER Inhalt für das BP-Register. ║
║ Return: Inhalt des BP-Registers nach der Ausführung. ║
║INTEGER Inhalt für das SI-Register. ║
║ Return: Inhalt des SI-Registers nach der Ausführung. ║
║INTEGER Inhalt für das DI-Register. ║
║ Return: Inhalt des DI-Registers nach der Ausführung. ║
║INTEGER Inhalt für das DS-Register. ║
║ Return: Inhalt des DS-Registers nach der Ausführung. ║
║INTEGER Inhalt für das ES-Register. ║
║ Return: Inhalt des ES-Registers nach der Ausführung. ║
║INTEGER Return: 1: Carryflag gesetzt ║
║ 0: Carryflag nicht gesetzt ║
╟──────────────────────────────────────────────────────────────────────╢
║ INTEGER IN,AX ║
║ IN=#21 ║
║ AX=#3000 ║
║ CALL INTER (IN,AX,0,0,0,0,0,0,0,0,0) ║
║ Das Programms ruft das Interrupt 21H, Funktion 30H ║
║ auf, das im AX-Register Informationen über die ║
║ benutzte MS-DOS-Version zurückgibt. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 165
Verschiedene Routinen
In dieser Rubrik sind Subroutinen zusammengestellt, deren Wirkung keiner
Gruppe zugeordnet werden kann.
Verschiedene Subroutinen
CPOS a) Cursor auf dem Bildschirm positionieren
CTYP a) Form des Cursors ändern
b) Cursor ausschalten
c) Cursor wieder einschalten
CONTCA a) Abbruch eines Programms durch "CONTROL-C" und "CONTROL-BREAK"
verhindern
CONTCE a) Abbruch eines Programms durch "CONTROL-C" und "CONTROL-BREAK"
wieder ermöglichen
CTBUF a) Im Tastaturpuffer vorhandene Zeichen löschen
DRUOP a) Druckerunit öffnen und Druckerstatus abfragen
DRUST a) Druckerstatus abfragen
GETDAY a) Kennziffer für den aktuellen Wochentag ermitteln
INV24 a) Serielle Schnittstelle öffnen und konfigurieren
REV24 a) String aus der seriellen Schnittstelle lesen
MAUS a) Emulation von Keyboard-Tasten durch eine MICROSOFT-kompatible
Maus
b) Ausschalten der Maus-Emulation
b) Wiederherstellen des ursprünglichen Mausstatus
PSP a) Inhalt der Programmsegmentpräfix in eine Charactervariable
lesen
PARAM a) Parameter aus der Kommandozeile zur Verfügung stellen
TASMOD a) Aktuellen Tastaturmodus ermitteln
b) Neuen Tastaturmodus setzen
SCPRF a) Segmentadresse des Bildschirmspeichers ermitteln
VIDMOD a) Aktuellen Videomodus ermitteln
b) Neuen Videomodus setzen und Bildschirminhalt löschen
c) Neuen Videomodus setzen und Bildschirminhalt erhalten
Seite 166
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine CPOS (ZEILE,SPALTE) ║
║Die Subroutine positioniert den Cursor auf dem Bildschirm in der vom ║
║Programm übergebenen Zeile und Spalte. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Bildschirmzeile. ║
║INTEGER Bildschirmspalte. ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiel: CALL CPOS (10,5) ║
║ Der Cursor wird in der 1o. Zeile und 5. Spalte ║
║ positioniert. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 167
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine CTYP (ANFANG,ENDE) ║
║Die Subroutine setzt die Höhe und die Position des Cursors innerhalb ║
║einer Bildschirmtextzeile. Wenn beide Parameter Null gesetzt werden, ║
║wird der Cursor ausgeschaltet. Wenn beide Parameter eins gesetzt ║
║werden, wird der Cursor auf die normalen Werte gesetzt. Mit allen ║
║anderen Werten kann die Form des Cursors variiert werden. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Pixelzeile in der Bildschirmtextzeile, in der der ║
║ Cursor beginnt [0 bis 31]. ║
║INTEGER Pixelzeile in der Bildschirmtextzeile, in der der ║
║ Cursor endet [0 bis 31]. ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiele: CALL CTYP (5,7) ║
║ Ein drei Pixelzeilen hoher Cursor wird am Fuß der ║
║ Bildschirmtextzeile gesetzt. ║
║ CALL CTYP (0,0) ║
║ Der Cursor wird ausgeschaltet. ║
║ CALL CTYP (1,1) ║
║ Der für den jeweiligen Bildschirmmodus übliche ║
║ Cursortyp wird gesetzt. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 168
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine CONTCA () ║
║Die Subroutine verhindert den Abbruch des rufenden Programms durch das║
║Betätigen der Tastenkombination CONTROL-C oder CONTROL-BREAK. Vor der ║
║Beendigung des rufenden Programms sollte die Subroutine CONTCE ║
║aufgerufen werden, um den Tastenkombinationen die ursprüngliche ║
║Bestimmung zurückzugeben. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: keine ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiel: CALL CONTCA () ║
║ Im weiteren Programmablauf lösen die Tasten- ║
║ kombinationen CONTROL-C und CONTROL-BREAK keine ║
║ Aktion mehr aus, bis die Subroutine CONTCE aufgerufen║
║ wird. ║
║ ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 169
╔=═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine CONTCE () ║
║Wenn mit der Subroutine CONTCA der Abbruch des rufenden Programms ║
║durch das Betätigen der Tastenkombination CONTROL-C oder CONTROL-BREAK║
║verhindert wurde, werden den Tastenkombinationen durch die Subroutine ║
║die ursprünglichen Bestimmungen zurückgegeben. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: keine ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiel: CALL CONTCE () ║
║ Im weiteren Programmablauf lösen die Tasten- ║
║ kombinationen CONTROL-C und CONTROL-BREAK wieder die ║
║ ihnen ursprünglich zugewiesenen Aktionen aus. ║
╚=═════════════════════════════════════════════════════════════════════╝
Seite 170
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine CTBUF () ║
║Die Subroutine löscht alle im Tastaturringpuffer vorhandenen Zeichen. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: keine ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiel: CALL CTBUF () ║
║ Alle im Tastaturpuffer vorhandenen Zeichen sind ║
║ gelöscht worden. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 171
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine DRUOP (UNI,STATUS) ║
║Die Subroutine überprüft die Betriebsbereitschaft des Druckers. ║
║Wenn der Drucker nicht betriebsbereit ist, wird in "STATUS" eine 0 ║
║zurückgegeben, andernfalls eine 1. Wenn der Drucker mit der in "UNI" ║
║übergebenen Nummer noch nicht geöffnet worden ist, wird er geöffnet. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Unit für den Drucker. ║
║INTEGER Return: Status des Druckers: ║
║ 0: Drucker ist nicht betriebsbereit. ║
║ 1: Drucker ist betriebsbereit und eröffnet. ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: DRUST ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: 1 CALL DRUOP (3,ISTAT) ║
║ IF (ISTAT .EQ. 0) THEN ║
║ WRITE(*,'(1X,A)') 'Drucker einschalten!' ║
║ GOTO 1 ║
║ ENDIF ║
║ Die Schleife wird erst verlassen, wenn der Drucker ║
║ betriebsbereit ist. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 172
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine DRUST (DRU) ║
║Die Subroutine erfragt den Status eines Druckers. Die Nummer des ║
║Druckers wird in "DRU" übergeben. Wenn der Drucker betriebsbereit ist,║
║wird in "DRU" eine 1, sonst eine 0 zurückgegeben. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Nummer des Druckers [1 bis n]. ║
║ Return: Druckerstatus: 1: Drucker betriebsbereit ║
║ 0: Drucker nicht bereit ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiel: I=1 ║
║ CALL DRUST (I) ║
║ IF (I .EQ. 1) OPEN (1,FILE='PRN',STATUS='OLD') ║
║ Der Drucker wird nur dann unter dem Unit 1 eröffnet, ║
║ wenn er betriebsbereit ist. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 173
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine GETDAY (TAG) ║
║Die Subroutine gibt in einer Variablen eine Kennziffer für den ║
║aktuellen Wochentag zurück. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Return: Kennziffer für den aktuellen Wochentag: ║
║ 1: Montag ║
║ 2: Dienstag ║
║ 3: Mittwoch ║
║ 4: Donnerstag ║
║ 5: Freitag ║
║ 6: Samstag ║
║ 7: Sonntag ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiel: CALL GETDAY (I) ║
║ In der Variablen wird die Kennziffer für den ║
║ aktuellen Wochentag zurückgegeben. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 174
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine INV24 (PORT,KONFIG) ║
║Die Subroutine konfiguriert eine serielle Schnittstelle. Die Nummer ║
║der Schnittstelle wird in "PORT" übergeben. Wenn die Schnittstelle ║
║nicht vorhanden ist, wird in "PORT" eine 0 zurückgegeben. In "KONFIG" ║
║werden die Konfigurationen übergeben. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Nummer der seriellen Schnittstelle [1 bis 4] ║
║ Return: 0 wenn Schnittstelle nicht vorhanden ist ║
║INTEGER Konfiguration der Schnittstelle: ║
║ Bits 7 6 5: Übertragungsgeschwindigkeit ║
║ 0 0 0 110 Baud ║
║ 0 0 1 150 Baud ║
║ 0 1 0 300 Baud ║
║ 0 1 1 600 Baud ║
║ 1 0 0 1200 Baud ║
║ 1 0 1 2400 Baud ║
║ 1 1 0 4800 Baud ║
║ 1 1 1 9600 Baud ║
║ Bits 4 3: Paritätskontrolle ║
║ 0 0 kein Paritätsbit ║
║ 0 1 ungerade Parität ║
║ 1 1 gerade Parität ║
║ Bit 2: Zahl der Stopbits ║
║ 0 ein Stopbit ║
║ 1 zwei Stopbits ║
║ Bits 1 0: Datenwortlänge ║
║ 1 0 7 Bit Datenwort ║
║ 1 1 8 Bit Datenwort ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiel: I=3 ║
║ CALL INV24 (I,251) ║
║ IF (I .EQ. 1) WRITE(*,'(1X,A)') 'Fehler!' ║
║ Wenn die serielle Schnittstelle mit der Nummer 3 ║
║ vorhanden ist, wird sie mit 9600 Baud, gerader ║
║ Parität, einem Stopbit und 8 Bit Wortlänge ║
║ konfiguriert. Wenn die Schnittstelle nicht vorhanden ║
║ ist, wird eine Fehlermeldung ausgegeben. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 175
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine REV24 (PORT,ANZ,STRING) ║
║Die Subroutine liest aus der in "PORT" übergebenen seriellen ║
║Schnittstelle einen String. Die Leseroutine wird beendet, wenn die ║
║Anzahl "ANZ" Zeichen erreicht ist, wenn ein Return-Code gelesen wird, ║
║oder wenn ein Fehler auftritt. Null-Characters werden überlesen. ║
║Der nicht beschriebene Teil des Strings wird mit Blanks aufgefüllt. ║
║Die Schnittstelle muß bereits initialisiert sein. Dazu eignet sich die║
║Subroutine INV24. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Nummer der seriellen Schnittstelle [1 bis 4] ║
║INTEGER Anzahl der zu lesenden Zeichen ║
║CHARACTERSTRING Return: Aus der seriellen Schnittstelle gelesene ║
║ Zeichen [ STRING*(ANZ) ] ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiel: CHARACTER STRING*30 ║
║ I=3 ║
║ CALL INV24 (I,251) ║
║ IF (I .NE. 0) WRITE(*,'(1X,A)') 'Fehler!' ║
║ CALL REV24 (3,30,STRING) ║
║ WRITE(*,'(1X,A)') STRING ║
║ Wenn die serielle Schnittstelle mit der Nummer 3 ║
║ vorhanden ist, wird sie mit 9600 Baud, gerader ║
║ Parität, einem Stopbit und 8 Bit Wortlänge ║
║ konfiguriert. Wenn die Schnittstelle nicht vorhanden ║
║ ist, wird eine Fehlermeldung ausgegeben. Danach wird ║
║ ein String mit maximal 30 Zeichen aus der ║
║ Schnittstelle gelesen. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 176
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine MAUS (TR,TL,RECHTS,LINKS,AUF,AB,SENS) ║
║Die Subroutine ordnet den Tasten und Richtungen einer installierten ║
║MIROSOFT-kompatiblen Maus definierte Keyboard-Tastendrücke zu. Dadurch║
║kann die Tastatur mit Hilfe der Maus simuliert werden. Die Tastatur ║
║kann dabei weiterhin uneingeschränkt parallel zur Maus bedient werden.║
║Die Empfindlichkeit der Maus wird mit SENS eingestellt. Zum Schluß des║
║Programms muß die Subroutine mit SENS gleich Null nochmals aufgerufen ║
║werden, damit die Maus ihre ursprüngliche Funktion zurückerhält. Mit ║
║der Subroutine können einfache Menüsteuerungen aufgebaut werden. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Bitmuster zur Emulation einer Keybord-Taste durch die║
║ rechte Maustaste: ║
║ 0: kein Tastaturäquivalent ║
║ 1: <Return-Taste> ║
║ 2: <Cursor rechts>-Taste ║
║ 4: <Cursor links>-Taste ║
║ 8: <Cursor aufwärts>-Taste ║
║ 16: <Cursor abwärts>-Taste ║
║ 32: <Bild aufwärts>-Taste ║
║ 64: <Bild abwärts>-Taste ║
║ 128: <Tabulator rechts>-Taste ║
║ 256: <Tabulator links>-Taste ║
║ 512: <Escape>-Taste ║
║ 1024: <F1>-Taste ║
║ 2048: <F2>-Taste ║
║ 4096: <F3>-Taste ║
║ 8192: <F4>-Taste ║
║ 16384: <F5>-Taste ║
║ 32768: <F6>-Taste ║
║ 65536: <F7>-Taste ║
║ 131072: <F8>-Taste ║
║ 262144: <F9>-Taste ║
║ 524288: <F10>-Taste ║
║INTEGER Bitmuster zur Emulation einer Keybord-Taste durch die║
║ linke Maustaste: ║
║ wie im ersten Parameter ║
║INTEGER Bitmuster zur Emulation einer Keybord-Taste durch die║
║ Bewegung der Maus nach rechts: ║
║ wie im ersten Parameter ║
║INTEGER Bitmuster zur Emulation einer Keybord-Taste durch die║
║ Bewegung der Maus nach links: ║
║ wie im ersten Parameter ║
║INTEGER Bitmuster zur Emulation einer Keybord-Taste durch die║
║ Bewegung der Maus nach oben: ║
║ wie im ersten Parameter ║
║INTEGER Bitmuster zur Emulation einer Keybord-Taste durch die║
║ Bewegung der Maus nach unten: ║
║ wie im ersten Parameter ║
║INTEGER Empfindlichkeit der Maus [1 bis 16] ║
║ 1: geringe Empfindlichkeit ║
║ 16: hohe Empfindlichkeit ║
║ oder: 0: Wiederherstellen der ursprünglichen ║
║ Mausfunktionen ║
Seite 177
║ Return: -1: Mausstatus: kein Maustreiber vorhanden ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiel: SENS=5 ║
║ CALL MAUS (1,512,2,4,8,16,SENS) ║
║ Die Escape- und Return-Tasten werden von den Maus- ║
║ tasten emuliert. Die Cursortasten werden durch die ║
║ Mausbewegungen emuliert. Wenn in SENS eine -1 steht, ║
║ ist kein Maustreiber vorhanden. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 178
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine PSP (ANZ,STRING) ║
║Aus der Programmsegmentpräfix (PSP) werden die beim Programmaufruf in ║
║der Kommandozeile aufgeführten Parameter ausgelesen und als String an ║
║das rufende Programm zurückgegeben. Die Anzahl der aus der PSP ║
║übernommenen Zeichen wird in ANZ übergeben. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Return: Anzahl der aus der PSP ausgelesenen und in ║
║ STRING übergebenen Zeichen. ║
║CHARACTERSTRING Return: String mit beim Programmaufruf übergebenen ║
║ Parametern [ STRING*128 ]. ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiel: CHARACTER STRING*128 ║
║ CALL PSP (I,STRING) ║
║ In STRING werden die beim Programmaufruf übergebenen ║
║ Parameter geschrieben. In I steht die Anzahl der aus ║
║ der PSP gelesenen Zeichen. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 179
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine PARAM (ANZ,PFELD) ║
║Die Subroutine schreibt eine Anzahl "ANZ" der beim Programmaufruf ║
║übergebenen Parameter in ein Characterfeld "PFELD". Beim Programm- ║
║aufruf dürfen die Parameter durch Blanks, Kommata oder Slashs ║
║voneinander getrennt sein. Fehlende Parameter in einer Parameterliste║
║können durch ein Komma oder durch einen Slash ersetzt sein. Führende ║
║Blanks werden ignoriert. Wenn weniger Parameter gefunden werden, als ║
║in "ANZ" erwartet, so wird in "ANZ" die Anzahl der tatsächlich ║
║gefundenen Parameter an das rufende Programm zurückgegeben. ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Anzahl der erwarteten Parameter. ║
║ Return: Anzahl der gefundenen Parameter. ║
║CHARACTERFELD Return: Feld mit den gefundenen Parametern. ║
║ [ gewünschte Parameterlänge * Anzahl! ] ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: PSP,LAENGE ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: CHARACTER PFELD*30(2) ║
║ I=2 ║
║ CALL PARAM (I,PFELD) ║
║ IF (I .NE. 2) WRITE(*,'(1X,A)') 'FEHLER' ║
║ Es werden die ersten zwei beim Programmaufruf ║
║ angegebenen Parameter in das Feld "PFELD" ║
║ geschrieben. Wenn kein oder weniger als zwei ║
║ Parameter vorhanden sind, wird eine Fehlermeldung ║
║ ausgegeben. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 180
╔═════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine TASMOD (SET,GET) ║
║Die Routine liest den aktuellen Tastaturmodus in GET ein und gibt ihn║
║an das rufende Programm zurück. Danach wird der neue tastaturmodus ║
║aus SET gesetzt. Die verschiedenen Zustände der tastatur sind dem ║
║folgenden Bitmuster entsprechend "AND"-verknüpft: ║
║ 11111111 11111111 DEZ Zustand ║
║ ││││││││ │││││││└ 1 Shifttaste rechts gedrückt ║
║ ││││││││ ││││││└─ 2 Shifttaste links gedrückt ║
║ ││││││││ │││││└── 4 Controltaste rechts oder links gedrückt║
║ ││││││││ ││││└─── 8 Alttaste rechts oder links gedrückt ║
║ ││││││││ │││└──── 16 Scroll-lock eingeschaltet ║
║ ││││││││ ││└───── 32 Num-lock eingeschaltet ║
║ ││││││││ │└────── 64 Caps-lock eingeschaltet ║
║ ││││││││ └─────── 128 Insert eingeschaltet ║
║ ││││││││ ║
║ │││││││└───────── 256 Controltaste links gedrückt ║
║ ││││││└────────── 512 Alttaste links gedrückt ║
║ │││││└─────────── 1024 Ohne Auswirkung ║
║ ││││└──────────── 2048 Pause eingeschaltet ║
║ │││└───────────── 4096 Scroll-lock-Taste gedrückt ║
║ ││└────────────── 8192 Num-lock-Taste gedrückt ║
║ │└─────────────── 16384 Caps-lock-Taste gedrückt ║
║ └──────────────── 32768 Insert-Taste gedrückt ║
╟─────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Zu setzender Tastaturmodus. ║
║INTEGER Return: Alter Tastaturmodus. ║
╟─────────────────────────────────────────────────────────────────────╢
║Subroutinen: PEEK,POKE ║
╟─────────────────────────────────────────────────────────────────────╢
║Beispiel: CALL TASMOD (96,I) ║
║ Der aktuelle Tastaturmodus wird in die Variable I ║
║ geschrieben, damit er später wieder in den ║
║ ursprünglichen Zustand gesetzt werden kann. Dann ║
║ werden Num-lock und Caps-lock eingeschaltet. ║
╚═════════════════════════════════════════════════════════════════════╝
Seite 181
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine SCPRF (SEGMENT) ║
║Die Subroutine gibt die Segmentadresse des Bildschirmspeichers in der ║
║Variablen SEGMENT an das rufende Programm zurück. Sie ist #0B000 beim ║
║Betrieb mit einem Monochromemonitor und #0B800 beim Betrieb mit einem ║
║Farbmonitor. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Return: Segmentadresse des Bildschirmspeichers: ║
║ #0B000: Monochromemonitor ║
║ #0B800: Farbmonitor ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiel: CALL SCPRF (SEGM) ║
║ In der Variablen SEGM wird beim Betrieb mit einem ║
║ Monochromemonitor #0B000 oder beim Betrieb mit einem ║
║ Farbmonitor #0B800 an das rufende Programm zurück- ║
║ gegeben. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 182
╔══════════════════════════════════════════════════════════════════════╗
║Beschreibung der Subroutine VIDMOD (NEUMOD,ALTMOD,CLSFLAG) ║
║Die Subroutine liest den aktuellen Videomodus und gibt ihn in der ║
║Variablen ALTMOD an das rufende Programm zurück. Danach wird geprüft, ║
║od der neu zu setzende Videomodus NEUMOD zur Hardwarekonfiguration von║
║Videokarte und Bildschirm paßt. Wenn das der Fall ist, wird der neue ║
║Videomodus gesetzt, wenn nicht, bleibt der alte Videomodus erhalten ║
║und in CLSFLAG wird eine 0 zurückgegeben. Das Löschen des Bildschirms ║
║beim Aktivieren eines neuen Videomodus wird werhindert, wenn in ║
║CLSFLAG eine 2 übergeben wird. Eine 1 in CLSFLAG löscht den Bildschirm║
║beim Aktivieren des neuen Videomodus. ║
╟──────────────────────────────────────────────────────────────────────╢
║Parameter: ║
║INTEGER Neu zu setzender Videomodus: ║
║ Modus Auflösg Sp/Z. Farben ║
║ 0 Text 320*350 40*25 16 grau ║
║ 1 Text 320*350 40*25 16 ║
║ 2 Text 640*350 80*25 16 grau ║
║ 3 Text 640*350 80*25 16 ║
║ 4 Grafik 320*200 40*25 4 ║
║ 5 Grafik 320*200 40*25 4 grau ║
║ 6 Grafik 640*200 80*25 bw ║
║ 7 Text 720*350 80*25 bw ║
║ 13 Grafik 320*200 40*25 16 ║
║ 14 Grafik 640*200 80*25 16 ║
║ 15 Grafik 640*350 80*25 bw ║
║ 16 Grafik 640*350 80*25 16 ║
║ 17 Grafik 640*480 80*30 bw ║
║ 18 Grafik 640*480 80*30 16 ║
║ 19 Grafik 320*200 40*25 256 ║
║INTEGER Return: Bisheriger Videomodus. ║
║INTEGER Flag zum Löschen des Bildschirms: ║
║ 1: Bildschirm soll gelöscht werden ║
║ 2: Bildschirm soll nicht gelöscht werden ║
║ Return: ║
║ 0: Setzen des neuen Videomodus ist nicht möglich ║
╟──────────────────────────────────────────────────────────────────────╢
║Beispiel: J=1 ║
║ CALL VIDMOD (18,I,J) ║
║ Es wird überprüft, ob der VGA-Farbmodus gesetzt ║
║ werden kann. Wenn das der Fall ist, wird in I der ║
║ bisherige Videomodus zurückgegeben und der VGA- ║
║ Farbmodus wird gesetzt, wobei der Bildschirminhalt ║
║ gelöscht wird. Eine 0 in J zeigt an, daß das Setzen ║
║ eines neuen Videomodus aus Gründen der Hardware- ║
║ konfiguration nicht möglich ist. ║
╚══════════════════════════════════════════════════════════════════════╝
Seite 183
ASCII-Code-Tabelle
CTL = Control-Code Steuerzeichen Bed = Bedeutung Steuerzeichen
Ch = ASCII-Zeichen Dez = Dezimale Entsprechung
Hex = Hexadezimale Entsprechung
CTL. Bed. Ch Dez. Hex. Ch Dez. Hex. Ch Dez. Hex. Ch Dez. Hex.
CTL @ NU 0 00 @ 64 40 Ç 128 80 └ 192 C0
CTL A SH 1 01 A 65 41 ü 129 81 ┴ 193 C1
CTL B SX 2 02 B 66 42 é 130 82 ┬ 194 C2
CTL C EX 3 03 C 67 43 â 131 83 ├ 195 C3
CTL D ET 4 04 D 68 44 ä 132 84 ─ 196 C4
CTL E EQ 5 05 E 69 45 à 133 85 ┼ 197 C5
CTL F AK 6 06 F 70 46 å 134 86 ╞ 198 C6
CTL G BEL 7 07 G 71 47 ç 135 87 ╟ 199 C7
CTL H BS 8 08 H 72 48 ê 136 88 ╚ 200 C8
CTL I HT 9 09 I 73 49 ë 137 89 ╔ 201 C9
CTL J LF 10 0A J 74 4A è 138 8A ╩ 202 CA
CTL K VT 11 0B K 75 4B ï 139 8B ╦ 203 CB
CTL L FF 12 0C L 76 4C î 140 8C ╠ 204 CC
CTL M CR 13 0D M 77 4D ì 141 8D ═ 205 CD
CTL N SO 14 0E N 78 4E Ä 142 8E ╬ 206 CE
CTL O SI 15 0F O 79 4F Å 143 8F ╧ 207 CF
CTL P DL 16 10 P 80 50 É 144 90 ╨ 208 D0
CTL Q D1 17 11 Q 81 51 æ 145 91 ╤ 209 D1
CTL R D2 18 12 R 82 52 Æ 146 92 ╥ 210 D2
CTL S D3 19 13 S 83 53 ô 147 93 ╙ 211 D3
CTL T D4 20 14 T 84 54 ö 148 94 ╘ 212 D4
CTL U NK 21 15 U 85 55 ò 149 95 ╒ 213 D5
CTL V SY 22 16 V 86 56 û 150 96 ╓ 214 D6
CTL W EB 23 17 W 87 57 ù 151 97 ╫ 215 D7
CTL X CN 24 18 X 88 58 ÿ 152 98 ╪ 216 D8
CTL Y EM 25 19 Y 89 59 Ö 153 99 ┘ 217 D9
CTL Z SB 26 1A Z 90 5A Ü 154 9A ┌ 218 DA
CTL [ EC 27 1B [ 91 5B ¢ 155 9B █ 219 DB
CTL \ FS 28 1C \ 92 5C £ 156 9C ▄ 220 DC
CTL ] GS 29 1D ] 93 5D ¥ 157 9D ▌ 221 DD
CTL ^ RS 30 1E ^ 94 5E ₧ 158 9E ▐ 222 DE
CTL _ US 31 1F _ 95 5F ƒ 159 9F ▀ 223 DF
32 20 ` 96 60 á 160 A0 α 224 E0
! 33 21 a 97 61 í 161 A1 ß 225 E1
" 34 22 b 98 62 ó 162 A2 Γ 226 E2
# 35 23 c 99 63 ú 163 A3 π 227 E3
$ 36 24 d 100 64 ñ 164 A4 Σ 228 E4
% 37 25 e 101 65 Ñ 165 A5 σ 229 E5
& 38 26 f 102 66 ª 166 A6 µ 230 E6
' 39 27 g 103 67 º 167 A7 τ 231 E7
( 40 28 h 104 68 ¿ 168 A8 Φ 232 E8
) 41 29 i 105 69 ⌐ 169 A9 Θ 233 E9
Seite 184
* 42 2A j 106 6A ¬ 170 AA Ω 234 EA
+ 43 2B k 107 6B ½ 171 AB δ 235 EB
, 44 2C l 108 6C ¼ 172 AC ∞ 236 EC
- 45 2D m 109 6D ¡ 173 AD φ 237 ED
. 46 2E n 110 6E « 174 AE ε 238 EE
/ 47 2F o 111 6F » 175 AF ∩ 239 EF
0 48 30 p 112 70 ░ 176 B0 ≡ 240 F0
1 49 31 q 113 71 ▒ 177 B1 ± 241 F1
2 50 32 r 114 72 ▓ 178 B2 ≥ 242 F2
3 51 33 s 115 73 │ 179 B3 ≤ 243 F3
4 52 34 t 116 74 ┤ 180 B4 ⌠ 244 F4
5 53 35 u 117 75 ╡ 181 B5 ⌡ 245 F5
6 54 36 v 118 76 ╢ 182 B6 ÷ 246 F6
7 55 37 w 119 77 ╖ 183 B7 ≈ 247 F7
8 56 38 x 120 78 ╕ 184 B8 ° 248 F8
9 57 39 y 121 79 ╣ 185 B9 ∙ 249 F9
: 58 3A z 122 7A ║ 186 BA · 250 FA
; 59 3B { 123 7B ╗ 187 BB √ 251 FB
< 60 3C | 124 7C ╝ 188 BC ⁿ 252 FC
= 61 3D } 125 7D ╜ 189 BD ² 253 FD
> 62 3E ~ 126 7E ╛ 190 BE ■ 254 FE
? 63 3F 127 7F ┐ 191 BF 255 FF
Seite 185
Farbcode-Tabelle
Dez = Dezimaler Farbcode für Farbattribut
Hex = Hexadezimaler Farbcode für Farbattribut
Vordergrund Hintergrund Dez Hex Vordergrund Hintergrund Dez Hex
Schwarz Schwarz 0 00 Schwarz Rot 64 40
Blau Schwarz 1 01 Blau Rot 65 41
Grün Schwarz 2 02 Grün Rot 66 42
Cyan Schwarz 3 03 Cyan Rot 67 43
Rot Schwarz 4 04 Rot Rot 68 44
Magenta Schwarz 5 05 Magenta Rot 69 45
Braun Schwarz 6 06 Braun Rot 70 46
Hellgrau Schwarz 7 07 Hellgrau Rot 71 47
Dunkelgrau Schwarz 8 08 Dunkelgrau Rot 72 48
Hellblau Schwarz 9 09 Hellblau Rot 73 49
Hellgrün Schwarz 10 0A Hellgrün Rot 74 4A
Hellcyan Schwarz 11 0B Hellcyan Rot 75 4B
Hellrot Schwarz 12 0C Hellrot Rot 76 4C
Hellmagenta Schwarz 13 0D Hellmagenta Rot 77 4D
Gelb Schwarz 14 0E Gelb Rot 78 4E
Weiß Schwarz 15 0F Weiß Rot 79 4F
Schwarz Blau 16 10 Schwarz Magenta 80 50
Blau Blau 17 11 Blau Magenta 81 51
Grün Blau 18 12 Grün Magenta 82 52
Cyan Blau 19 13 Cyan Magenta 83 53
Rot Blau 20 14 Rot Magenta 84 54
Magenta Blau 21 15 Magenta Magenta 85 55
Braun Blau 22 16 Braun Magenta 86 56
Hellgrau Blau 23 17 Hellgrau Magenta 87 57
Dunkelgrau Blau 24 18 Dunkelgrau Magenta 88 58
Hellblau Blau 25 19 Hellblau Magenta 89 59
Hellgrün Blau 26 1A Hellgrün Magenta 90 5A
Hellcyan Blau 27 1B Hellcyan Magenta 91 5B
Hellrot Blau 28 1C Hellrot Magenta 92 5C
Hellmagenta Blau 29 1D Hellmagenta Magenta 93 5D
Gelb Blau 30 1E Gelb Magenta 94 5E
Weiß Blau 31 1F Weiß Magenta 95 5F
Schwarz Grün 32 20 Schwarz Braun 96 60
Blau Grün 33 21 Blau Braun 97 61
Grün Grün 34 22 Grün Braun 98 62
Cyan Grün 35 23 Cyan Braun 99 63
Rot Grün 36 24 Rot Braun 100 64
Magenta Grün 37 25 Magenta Braun 101 65
Braun Grün 38 26 Braun Braun 102 66
Hellgrau Grün 39 27 Hellgrau Braun 103 67
Dunkelgrau Grün 40 28 Dunkelgrau Braun 104 68
Hellblau Grün 41 29 Hellblau Braun 105 69
Seite 186
Hellgrün Grün 42 2A Hellgrün Braun 106 6A
Hellcyan Grün 43 2B Hellcyan Braun 107 6B
Hellrot Grün 44 2C Hellrot Braun 108 6C
Hellmagenta Grün 45 2D Hellmagenta Braun 109 6D
Gelb Grün 46 2E Gelb Braun 110 6E
Weiß Grün 47 2F Weiß Braun 111 6F
Schwarz Cyan 48 30 Schwarz Hellgrau 112 70
Blau Cyan 49 31 Blau Hellgrau 113 71
Grün Cyan 50 32 Grün Hellgrau 114 72
Cyan Cyan 51 33 Cyan Hellgrau 115 73
Rot Cyan 52 34 Rot Hellgrau 116 74
Magenta Cyan 53 35 Magenta Hellgrau 117 75
Braun Cyan 54 36 Braun Hellgrau 118 76
Hellgrau Cyan 55 37 Hellgrau Hellgrau 119 77
Dunkelgrau Cyan 56 38 Dunkelgrau Hellgrau 120 78
Hellblau Cyan 57 39 Hellblau Hellgrau 121 79
Hellgrün Cyan 58 3A Hellgrün Hellgrau 122 7A
Hellcyan Cyan 59 3B Hellcyan Hellgrau 123 7B
Hellrot Cyan 60 3C Hellrot Hellgrau 124 7C
Hellmagenta Cyan 61 3D Hellmagenta Hellgrau 125 7D
Gelb Cyan 62 3E Gelb Hellgrau 126 7E
Weiß Cyan 63 3F Weiß Hellgrau 127 7F